We were using the wrong “maximal” model! This is a quick notebook to check what we see when we use the right maximal model to determine how many factors to extract.
US Adults, 2 characters
Maximal structure, oblimin rotation
Loading required namespace: GPArotation
convergence not obtained in GPFoblq. 1000 iterations used. A loading greater than abs(1) was detected. Examine the loadings carefully.Joining, by = "factor"

Reduced structure, oblimin rotation
Joining, by = "factor"

Alternative factor retention methods
Parallel analysis suggests that the number of factors = 4 and the number of components = 3

convergence not obtained in GPFoblq. 1000 iterations used.convergence not obtained in GPFoblq. 1000 iterations used.convergence not obtained in GPFoblq. 1000 iterations used.convergence not obtained in GPFoblq. 1000 iterations used.The estimated weights for the factor scores are probably incorrect. Try a different factor extraction method.
convergence not obtained in GPFoblq. 1000 iterations used. A loading greater than abs(1) was detected. Examine the loadings carefully.The estimated weights for the factor scores are probably incorrect. Try a different factor extraction method.
convergence not obtained in GPFoblq. 1000 iterations used. A loading greater than abs(1) was detected. Examine the loadings carefully.The estimated weights for the factor scores are probably incorrect. Try a different factor extraction method.
The estimated weights for the factor scores are probably incorrect. Try a different factor extraction method.
The estimated weights for the factor scores are probably incorrect. Try a different factor extraction method.
convergence not obtained in GPFoblq. 1000 iterations used. A loading greater than abs(1) was detected. Examine the loadings carefully.The estimated weights for the factor scores are probably incorrect. Try a different factor extraction method.
convergence not obtained in GPFoblq. 1000 iterations used. A loading greater than abs(1) was detected. Examine the loadings carefully.convergence not obtained in GPFoblq. 1000 iterations used. A loading greater than abs(1) was detected. Examine the loadings carefully.convergence not obtained in GPFoblq. 1000 iterations used. A loading greater than abs(1) was detected. Examine the loadings carefully.convergence not obtained in GPFoblq. 1000 iterations used. A loading greater than abs(1) was detected. Examine the loadings carefully.convergence not obtained in GPFoblq. 1000 iterations used. A loading greater than abs(1) was detected. Examine the loadings carefully.convergence not obtained in GPFoblq. 1000 iterations used. A loading greater than abs(1) was detected. Examine the loadings carefully.convergence not obtained in GPFoblq. 1000 iterations used. A loading greater than abs(1) was detected. Examine the loadings carefully.convergence not obtained in GPFoblq. 1000 iterations used. A loading greater than abs(1) was detected. Examine the loadings carefully.convergence not obtained in GPFoblq. 1000 iterations used. A loading greater than abs(1) was detected. Examine the loadings carefully.convergence not obtained in GPFoblq. 1000 iterations used. A loading greater than abs(1) was detected. Examine the loadings carefully.
Very Simple Structure
Call: vss(x = x, n = n, rotate = rotate, diagonal = diagonal, fm = fm,
n.obs = n.obs, plot = plot, title = title, use = use, cor = cor)
VSS complexity 1 achieves a maximimum of 0.68 with 1 factors
VSS complexity 2 achieves a maximimum of 0.85 with 2 factors
The Velicer MAP achieves a minimum of 0.01 with 4 factors
BIC achieves a minimum of -2293.44 with 3 factors
Sample Size adjusted BIC achieves a minimum of -398.01 with 7 factors
Statistics by number of factors
vss1 vss2 map dof chisq prob sqresid fit RMSEA BIC SABIC complex eChisq
1 0.68 0.00 0.046 740 3037.5 7.1e-275 61 0.68 0.131 -883 1461.1 1.0 7749.23
2 0.66 0.85 0.025 701 1871.1 2.9e-107 28 0.85 0.098 -1843 377.8 1.4 2416.67
3 0.57 0.79 0.012 663 1219.3 2.1e-35 31 0.84 0.071 -2293 -193.0 1.5 744.73
4 0.52 0.71 0.012 626 1062.1 4.7e-25 38 0.80 0.065 -2255 -271.4 1.6 507.14
5 0.40 0.62 0.012 590 910.0 4.5e-16 47 0.75 0.059 -2216 -346.9 1.8 409.97
6 0.44 0.61 0.013 555 808.6 9.9e-12 48 0.75 0.055 -2132 -373.7 1.8 311.67
7 0.43 0.61 0.013 521 711.8 4.8e-08 56 0.71 0.051 -2049 -398.0 1.7 255.44
8 0.43 0.61 0.014 488 654.3 6.6e-07 57 0.70 0.049 -1931 -385.2 1.8 218.28
9 0.38 0.54 0.016 456 606.5 2.8e-06 63 0.67 0.049 -1810 -364.9 1.9 191.00
10 0.35 0.51 0.017 425 560.0 1.1e-05 66 0.65 0.049 -1692 -345.3 2.1 161.68
11 0.38 0.50 0.017 395 519.8 2.4e-05 67 0.65 0.049 -1573 -321.7 2.1 136.92
12 0.29 0.43 0.019 366 466.8 2.8e-04 73 0.62 0.047 -1472 -312.8 2.5 112.84
13 0.26 0.36 0.020 338 424.0 1.0e-03 78 0.59 0.046 -1367 -296.0 2.6 95.28
14 0.27 0.39 0.022 311 384.7 2.7e-03 79 0.59 0.045 -1263 -277.8 2.6 79.78
15 0.25 0.36 0.024 285 354.3 3.2e-03 83 0.56 0.046 -1156 -252.8 2.6 68.91
16 0.23 0.34 0.026 260 317.8 8.3e-03 86 0.55 0.045 -1060 -236.1 2.9 56.50
17 0.22 0.31 0.029 236 269.9 6.4e-02 87 0.54 0.040 -980 -232.8 3.2 47.38
18 0.21 0.30 0.031 213 235.9 1.3e-01 89 0.53 0.037 -893 -217.8 3.2 38.70
19 0.19 0.28 0.034 191 193.7 4.3e-01 93 0.51 0.029 -818 -213.2 3.2 30.13
20 0.18 0.25 0.037 170 162.4 6.5e-01 96 0.49 0.023 -738 -199.7 3.1 23.98
21 0.18 0.26 0.041 150 145.6 5.9e-01 97 0.49 0.026 -649 -173.9 3.2 19.36
22 0.17 0.24 0.045 131 128.5 5.4e-01 98 0.48 0.027 -566 -150.5 3.5 15.35
23 0.16 0.23 0.050 113 112.2 5.0e-01 102 0.46 0.029 -486 -128.5 3.3 12.11
24 0.17 0.23 0.054 96 90.9 6.3e-01 104 0.45 0.024 -418 -113.6 3.2 9.46
25 0.17 0.23 0.061 80 75.0 6.4e-01 106 0.44 0.023 -349 -95.4 3.2 7.00
26 0.16 0.22 0.067 65 48.9 9.3e-01 108 0.43 0.000 -296 -89.6 3.3 4.97
27 0.16 0.22 0.075 51 33.9 9.7e-01 110 0.42 0.000 -236 -74.7 3.3 3.35
28 0.15 0.20 0.083 38 24.1 9.6e-01 112 0.41 0.000 -177 -56.9 3.3 2.11
29 0.16 0.21 0.097 26 15.8 9.4e-01 115 0.39 0.000 -122 -39.6 2.9 1.26
30 0.16 0.20 0.111 15 9.8 8.3e-01 117 0.39 0.000 -70 -22.1 2.8 0.72
31 0.16 0.20 0.128 5 3.5 6.3e-01 120 0.37 0.000 -23 -7.2 3.2 0.26
SRMR eCRMS eBIC
1 0.1576 0.162 3828
2 0.0880 0.093 -1297
3 0.0489 0.053 -2768
4 0.0403 0.045 -2810
5 0.0362 0.042 -2716
6 0.0316 0.037 -2629
7 0.0286 0.035 -2505
8 0.0265 0.033 -2367
9 0.0247 0.032 -2225
10 0.0228 0.031 -2090
11 0.0209 0.029 -1956
12 0.0190 0.028 -1826
13 0.0175 0.027 -1696
14 0.0160 0.025 -1568
15 0.0149 0.025 -1441
16 0.0135 0.023 -1321
17 0.0123 0.022 -1203
18 0.0111 0.021 -1090
19 0.0098 0.020 -982
20 0.0088 0.019 -877
21 0.0079 0.018 -775
22 0.0070 0.017 -679
23 0.0062 0.016 -587
24 0.0055 0.016 -499
25 0.0047 0.015 -417
26 0.0040 0.014 -339
27 0.0033 0.013 -267
28 0.0026 0.012 -199
29 0.0020 0.011 -136
30 0.0015 0.011 -79
31 0.0009 0.011 -26
Clustering within reduced factor space

Joining, by = "capacity"
Joining, by = "capacity"



7-9yo US Children, 2 characters
Maximal structure, oblimin rotation
convergence not obtained in GPFoblq. 1000 iterations used. A loading greater than abs(1) was detected. Examine the loadings carefully.Joining, by = "factor"

Reduced structure, oblimin rotation
Joining, by = "factor"

Alternative factor retention methods
Parallel analysis suggests that the number of factors = 3 and the number of components = 3

convergence not obtained in GPFoblq. 1000 iterations used. A loading greater than abs(1) was detected. Examine the loadings carefully.The estimated weights for the factor scores are probably incorrect. Try a different factor extraction method.
A loading greater than abs(1) was detected. Examine the loadings carefully.The estimated weights for the factor scores are probably incorrect. Try a different factor extraction method.
A loading greater than abs(1) was detected. Examine the loadings carefully.The estimated weights for the factor scores are probably incorrect. Try a different factor extraction method.
convergence not obtained in GPFoblq. 1000 iterations used. A loading greater than abs(1) was detected. Examine the loadings carefully.The estimated weights for the factor scores are probably incorrect. Try a different factor extraction method.
convergence not obtained in GPFoblq. 1000 iterations used. A loading greater than abs(1) was detected. Examine the loadings carefully.The estimated weights for the factor scores are probably incorrect. Try a different factor extraction method.
A loading greater than abs(1) was detected. Examine the loadings carefully.The estimated weights for the factor scores are probably incorrect. Try a different factor extraction method.
A loading greater than abs(1) was detected. Examine the loadings carefully.The estimated weights for the factor scores are probably incorrect. Try a different factor extraction method.
convergence not obtained in GPFoblq. 1000 iterations used. A loading greater than abs(1) was detected. Examine the loadings carefully. A loading greater than abs(1) was detected. Examine the loadings carefully. A loading greater than abs(1) was detected. Examine the loadings carefully.convergence not obtained in GPFoblq. 1000 iterations used. A loading greater than abs(1) was detected. Examine the loadings carefully. A loading greater than abs(1) was detected. Examine the loadings carefully. A loading greater than abs(1) was detected. Examine the loadings carefully.convergence not obtained in GPFoblq. 1000 iterations used. A loading greater than abs(1) was detected. Examine the loadings carefully.convergence not obtained in GPFoblq. 1000 iterations used. A loading greater than abs(1) was detected. Examine the loadings carefully.convergence not obtained in GPFoblq. 1000 iterations used. A loading greater than abs(1) was detected. Examine the loadings carefully. A loading greater than abs(1) was detected. Examine the loadings carefully.convergence not obtained in GPFoblq. 1000 iterations used. A loading greater than abs(1) was detected. Examine the loadings carefully. A loading greater than abs(1) was detected. Examine the loadings carefully.convergence not obtained in GPFoblq. 1000 iterations used. A loading greater than abs(1) was detected. Examine the loadings carefully.
Very Simple Structure
Call: vss(x = x, n = n, rotate = rotate, diagonal = diagonal, fm = fm,
n.obs = n.obs, plot = plot, title = title, use = use, cor = cor)
VSS complexity 1 achieves a maximimum of 0.63 with 2 factors
VSS complexity 2 achieves a maximimum of 0.76 with 2 factors
The Velicer MAP achieves a minimum of 0.01 with 3 factors
BIC achieves a minimum of -2636.75 with 3 factors
Sample Size adjusted BIC achieves a minimum of -549.78 with 5 factors
Statistics by number of factors
vss1 vss2 map dof chisq prob sqresid fit RMSEA BIC SABIC complex eChisq
1 0.61 0.00 0.0207 740 1845.8 7.7e-96 48 0.61 0.091 -2093 251 1.0 4474.74
2 0.63 0.76 0.0121 701 1170.5 3.8e-26 29 0.76 0.063 -2561 -340 1.3 1567.74
3 0.54 0.72 0.0090 663 892.4 5.7e-09 28 0.77 0.048 -2637 -536 1.6 819.41
4 0.46 0.65 0.0096 626 803.4 1.9e-06 33 0.74 0.044 -2529 -545 1.8 690.41
5 0.46 0.61 0.0099 590 721.5 1.6e-04 32 0.74 0.041 -2419 -550 2.1 566.04
6 0.41 0.56 0.0107 555 652.2 2.7e-03 36 0.71 0.038 -2302 -544 2.0 481.91
7 0.36 0.51 0.0113 521 586.3 2.5e-02 38 0.69 0.034 -2187 -536 2.3 402.07
8 0.37 0.51 0.0121 488 526.6 1.1e-01 37 0.70 0.031 -2071 -525 2.5 336.72
9 0.32 0.47 0.0133 456 476.0 2.5e-01 39 0.68 0.028 -1951 -506 2.7 288.45
10 0.34 0.48 0.0145 425 438.0 3.2e-01 39 0.68 0.027 -1824 -478 2.6 248.24
11 0.35 0.47 0.0156 395 394.7 4.9e-01 40 0.68 0.024 -1708 -456 2.6 206.88
12 0.34 0.44 0.0168 366 352.3 6.9e-01 40 0.67 0.020 -1596 -436 2.7 174.58
13 0.33 0.41 0.0183 338 316.3 8.0e-01 42 0.66 0.016 -1483 -412 3.0 146.78
14 0.26 0.36 0.0202 311 282.7 8.7e-01 46 0.63 0.012 -1373 -387 3.4 126.67
15 0.28 0.38 0.0221 285 249.9 9.3e-01 45 0.64 0.000 -1267 -364 3.4 107.47
16 0.25 0.34 0.0239 260 217.0 9.8e-01 48 0.61 0.000 -1167 -343 3.5 87.43
17 0.21 0.29 0.0262 236 190.8 9.9e-01 51 0.58 0.000 -1065 -318 3.9 72.52
18 0.21 0.28 0.0284 213 162.0 1.0e+00 53 0.57 0.000 -972 -297 3.8 58.24
19 0.22 0.30 0.0305 191 144.3 1.0e+00 52 0.58 0.000 -872 -267 3.7 48.39
20 0.23 0.30 0.0331 170 119.3 1.0e+00 54 0.56 0.000 -786 -247 3.4 38.38
21 0.26 0.33 0.0367 150 101.5 1.0e+00 54 0.56 0.000 -697 -222 3.2 30.20
22 0.23 0.29 0.0403 131 87.0 1.0e+00 56 0.54 0.000 -610 -195 3.6 23.54
23 0.23 0.29 0.0441 113 72.5 1.0e+00 57 0.54 0.000 -529 -171 3.5 18.85
24 0.22 0.27 0.0480 96 61.4 1.0e+00 59 0.52 0.000 -450 -145 3.6 15.41
25 0.21 0.26 0.0529 80 52.2 9.9e-01 58 0.53 0.000 -374 -120 3.5 11.81
26 0.21 0.26 0.0578 65 42.5 9.9e-01 59 0.52 0.000 -304 -98 3.3 9.30
27 0.23 0.28 0.0630 51 30.8 9.9e-01 61 0.51 0.000 -241 -79 3.1 6.37
28 0.23 0.28 0.0702 38 19.7 9.9e-01 63 0.49 0.000 -183 -62 3.4 4.04
29 0.22 0.27 0.0791 26 14.1 9.7e-01 63 0.49 0.000 -124 -42 3.4 2.73
30 0.23 0.26 0.0908 15 7.1 9.5e-01 66 0.46 0.000 -73 -25 3.3 1.36
31 0.24 0.29 0.1044 5 2.8 7.3e-01 66 0.46 0.000 -24 -8 2.9 0.59
SRMR eCRMS eBIC
1 0.1183 0.121 536
2 0.0700 0.074 -2164
3 0.0506 0.055 -2710
4 0.0465 0.052 -2642
5 0.0421 0.048 -2575
6 0.0388 0.046 -2472
7 0.0355 0.043 -2371
8 0.0324 0.041 -2261
9 0.0300 0.039 -2139
10 0.0279 0.038 -2014
11 0.0254 0.036 -1896
12 0.0234 0.034 -1774
13 0.0214 0.033 -1652
14 0.0199 0.032 -1529
15 0.0183 0.030 -1410
16 0.0165 0.029 -1297
17 0.0151 0.027 -1184
18 0.0135 0.026 -1076
19 0.0123 0.025 -968
20 0.0110 0.023 -867
21 0.0097 0.022 -768
22 0.0086 0.021 -674
23 0.0077 0.020 -583
24 0.0069 0.020 -496
25 0.0061 0.019 -414
26 0.0054 0.019 -337
27 0.0045 0.017 -265
28 0.0036 0.016 -198
29 0.0029 0.016 -136
30 0.0021 0.015 -78
31 0.0014 0.017 -26
Clustering within reduced factor space

Joining, by = "capacity"
Joining, by = "capacity"



7-9yo US Children, 9 characters
Maximal structure, oblimin rotation
convergence not obtained in GPFoblq. 1000 iterations used. A loading greater than abs(1) was detected. Examine the loadings carefully.Joining, by = "factor"

Reduced structure, oblimin rotation
Joining, by = "factor"

Alternative factor retention methods
Parallel analysis suggests that the number of factors = 3 and the number of components = 3

Very Simple Structure
Call: vss(x = x, n = n, rotate = rotate, diagonal = diagonal, fm = fm,
n.obs = n.obs, plot = plot, title = title, use = use, cor = cor)
VSS complexity 1 achieves a maximimum of 0.82 with 1 factors
VSS complexity 2 achieves a maximimum of 0.9 with 2 factors
The Velicer MAP achieves a minimum of 0.02 with 3 factors
BIC achieves a minimum of -447.53 with 3 factors
Sample Size adjusted BIC achieves a minimum of -41.12 with 7 factors
Statistics by number of factors
vss1 vss2 map dof chisq prob sqresid fit RMSEA BIC SABIC complex eChisq SRMR
1 0.82 0.00 0.041 170 542 1.8e-40 14.1 0.82 0.141 -276 262 1.0 690 0.121
2 0.77 0.90 0.032 151 374 6.8e-21 8.1 0.90 0.117 -353 125 1.2 279 0.077
3 0.56 0.88 0.022 133 192 5.7e-04 5.2 0.93 0.068 -448 -27 1.5 82 0.042
4 0.57 0.88 0.027 116 156 7.9e-03 4.7 0.94 0.062 -402 -35 1.6 65 0.037
5 0.56 0.87 0.032 100 125 4.5e-02 4.0 0.95 0.055 -356 -40 1.7 46 0.031
6 0.49 0.76 0.036 85 102 1.0e-01 3.5 0.96 0.052 -307 -38 2.0 32 0.026
7 0.49 0.74 0.042 71 76 3.2e-01 3.0 0.96 0.039 -266 -41 2.1 21 0.021
8 0.48 0.77 0.048 58 55 5.8e-01 2.5 0.97 0.023 -224 -40 2.1 12 0.016
eCRMS eBIC
1 0.128 -128
2 0.087 -448
3 0.050 -558
4 0.048 -494
5 0.043 -435
6 0.039 -377
7 0.035 -321
8 0.029 -267

Clustering within reduced factor space

Joining, by = "capacity"
Joining, by = "capacity"



4-6yo US Children
Maximal structure, oblimin rotation
A loading greater than abs(1) was detected. Examine the loadings carefully.Joining, by = "factor"

Reduced structure, oblimin rotation
Joining, by = "factor"

Alternative factor retention methods
Parallel analysis suggests that the number of factors = 2 and the number of components = 1

Joining, by = "factor"

An ultra-Heywood case was detected. Examine the results carefully
Very Simple Structure
Call: vss(x = x, n = n, rotate = rotate, diagonal = diagonal, fm = fm,
n.obs = n.obs, plot = plot, title = title, use = use, cor = cor)
VSS complexity 1 achieves a maximimum of 0.84 with 1 factors
VSS complexity 2 achieves a maximimum of 0.87 with 2 factors
The Velicer MAP achieves a minimum of 0.02 with 1 factors
BIC achieves a minimum of -521.5 with 1 factors
Sample Size adjusted BIC achieves a minimum of -46.41 with 4 factors
Statistics by number of factors
vss1 vss2 map dof chisq prob sqresid fit RMSEA BIC SABIC complex eChisq SRMR
1 0.84 0.00 0.018 170 298 4.7e-09 11.0 0.84 0.084 -521 16.0 1.0 276 0.076
2 0.62 0.87 0.019 151 242 3.5e-06 8.9 0.87 0.077 -486 -8.1 1.4 180 0.062
3 0.43 0.78 0.022 133 192 5.9e-04 7.8 0.88 0.068 -449 -28.2 1.9 132 0.053
4 0.34 0.67 0.023 116 146 3.1e-02 6.6 0.90 0.055 -413 -46.4 2.2 87 0.043
5 0.33 0.61 0.028 100 128 3.1e-02 5.9 0.91 0.057 -354 -37.8 2.4 70 0.039
6 0.32 0.60 0.033 85 104 8.1e-02 5.2 0.92 0.053 -306 -37.1 2.5 53 0.033
7 0.28 0.53 0.039 71 78 2.7e-01 4.5 0.93 0.042 -264 -39.8 2.6 34 0.027
8 0.31 0.55 0.046 58 57 5.3e-01 4.0 0.94 0.027 -223 -39.6 2.5 23 0.022
eCRMS eBIC
1 0.081 -544
2 0.069 -547
3 0.063 -509
4 0.055 -472
5 0.053 -412
6 0.050 -357
7 0.044 -308
8 0.040 -256

Joining, by = "factor"

Clustering within reduced factor space

Joining, by = "capacity"
Joining, by = "capacity"



Changes in mental capacity attributions
Joining, by = "subid"
Column `subid` joining character vector and factor, coercing into character vectorJoining, by = "subid"
Column `subid` joining character vector and factor, coercing into character vectorJoining, by = c("subid", "MR1", "MR3", "MR2", "age_group", "character", "age")
Column `character` joining factors with different levels, coercing to character vector

LS0tCnRpdGxlOiAiUXVpY2sgZGlta2lkIGNoZWNrIgpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazoKICAgIHRvYzogdHJ1ZQogICAgdG9jX2Zsb2F0OiB0cnVlCiAgICB0b2NfZGVwdGg6IDMKLS0tCgpXZSB3ZXJlIHVzaW5nIHRoZSB3cm9uZyAibWF4aW1hbCIgbW9kZWwhIFRoaXMgaXMgYSBxdWljayBub3RlYm9vayB0byBjaGVjayB3aGF0IHdlIHNlZSB3aGVuIHdlIHVzZSB0aGUgcmlnaHQgbWF4aW1hbCBtb2RlbCB0byBkZXRlcm1pbmUgaG93IG1hbnkgZmFjdG9ycyB0byBleHRyYWN0LgoKYGBge3IgZ2xvYmFsX29wdGlvbnMsIGluY2x1ZGUgPSBGfQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobz1GLCB3YXJuaW5nPUYsIGNhY2hlPUYsIG1lc3NhZ2U9RikKYGBgCgpgYGB7ciBsaWJyYXJpZXMsIGluY2x1ZGUgPSBGfQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShsdWJyaWRhdGUpCmxpYnJhcnkocHN5Y2gpCmxpYnJhcnkocm1zKQpsaWJyYXJ5KGRlbmRleHRlbmQpCmBgYAoKYGBge3IgZnVuY3Rpb25zLCBpbmNsdWRlID0gRn0KIyBtYWtlIGZ1bmN0aW9uIHRvIGNsZWFuIHVwIGtpZCBkYXRhIGZyb20gVVMKY2xlYW5fa2lkX3VzX2Z1biA8LSBmdW5jdGlvbihkZiwgbl90cmlhbHMsIGFnZV9sb3dlciwgYWdlX3VwcGVyKSB7CiAgCiAgaWYoISgiYWdlIiAlaW4lIG5hbWVzKGRmKSkpIHsKICAgIGRmIDwtIGRmICU+JQogICAgICBtdXRhdGUoYWdlID0gTkEpCiAgfQogIAogIGRmX2NsZWFuIDwtIGRmICU+JQogICAgbXV0YXRlKGRvYiA9IHBhcnNlX2RhdGV0aW1lKGRhdGVPZkJpcnRoLCAiJW0vJWQvJXkiKSwKICAgICAgICAgICBkb3QgPSBwYXJzZV9kYXRldGltZShnc3ViKCIyMDE3IiwgIjE3IiwgZGF0ZU9mVGVzdCksICIlbS8lZC8leSIpLAogICAgICAgICAgIGFnZSA9IGlmZWxzZShpcy5uYShhZ2UpLAogICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnZhbChzdGFydCA9IGRvYiwgZW5kID0gZG90KSAvCiAgICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb24obnVtID0gMSwgdW5pdHMgPSAieWVhcnMiKSwKICAgICAgICAgICAgICAgICAgICAgICAgYWdlKSkgJT4lCiAgICBmaWx0ZXIodHJpYWxOdW0gPD0gbl90cmlhbHMpICU+JQogICAgZmlsdGVyKChhZ2UgPj0gYWdlX2xvd2VyICYgYWdlIDwgYWdlX3VwcGVyICsgMSkgfCAjIG91dHNpZGUgb2YgYWdlIHJhbmdlCiAgICAgICAgICAgICBpcy5uYShhZ2UpLCAjIG1pc3NpbmcgYWdlCiAgICAgICAgICAgKHJ0ID49IDI1MCB8IGlzLm5hKHJ0KSksICMgZmFzdCBSVHMKICAgICAgICAgICByZXNwb25zZSAlaW4lIGMoIm5vIiwgImtpbmRhIiwgInllcyIpLCAjIHNraXBwZWQgdHJpYWxzCiAgICAgICAgICAgIWlzLm5hKHN1YmlkKSwgIWlzLm5hKGNhcGFjaXR5KSkgJT4lCiAgICBtdXRhdGUocmVzcG9uc2VOdW0gPSByZWNvZGUocmVzcG9uc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vIiA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImtpbmRhIiA9IDAuNSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieWVzIiA9IDEpLAogICAgICAgICAgIHJlc3BvbnNlTnVtID0gYXMubnVtZXJpYyhyZXNwb25zZU51bSkpICU+JQogICAgZGlzdGluY3Qoc3ViaWQsIGNhcGFjaXR5LCByZXNwb25zZU51bSkgJT4lCiAgICBtdXRhdGUoY2FwYWNpdHkgPSByZWNvZGUoY2FwYWNpdHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbnNjaW91cyIgPSAiYXdhcmVuZXNzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZW1iYXJyYXNzZWQiID0gImVtYmFycmFzc21lbnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJndWlsdCIgPSAiZ3VpbHQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXBweSIgPSAiaGFwcGluZXNzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibG92ZSIgPSAibG92ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhaW4iID0gInBhaW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwcmlkZSIgPSAicHJpZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXByZXNzZWQiID0gInNhZG5lc3MiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZWFyIiA9ICJmZWFyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmF1c2VhdGVkIiA9ICJuYXVzZWEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aXJlZCIgPSAiZmF0aWd1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlYXNvbmluZyIgPSAiZmlndXJpbmdfb3V0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYW5ncnkiID0gImFuZ2VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHVuZ3J5IiA9ICJodW5nZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaXNyZXNwZWN0ZWQiID0gImh1cnRfZmVlbGluZ3MiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjaG9pY2VzIiA9ICJjaG9pY2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZW1lbWJlcmluZyIgPSAibWVtb3J5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVtcGVyYXR1cmUiID0gInRlbXBlcmF0dXJlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVwdGgiID0gImRlcHRoIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib2RvcnMiID0gInNtZWxsIikpICU+JQogICAgc3ByZWFkKGNhcGFjaXR5LCByZXNwb25zZU51bSkgJT4lCiAgICByZW1vdmVfcm93bmFtZXMoKSAlPiUKICAgIGNvbHVtbl90b19yb3duYW1lcygic3ViaWQiKQogIAogIHJldHVybihkZl9jbGVhbikKICAKfQoKIyBtYWtlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBtYXggbl9mYWN0b3JzLCBnaXZlbiBuX29icyB2YXJpYWJsZXMKbWF4X2ZhY3RfZnVuIDwtIGZ1bmN0aW9uKHApIHsKICAKICBzX21vbWVudHMgPC0gZnVuY3Rpb24ocCkge3AqKHArMSkvMn0KICBwYXJhbV9lc3QgPC0gZnVuY3Rpb24ocCwgaykge3AqayArIHAgLSAoayooay0xKS8yKX0KICBjaGVja19vayA8LSBmdW5jdGlvbihwLCBrKSB7CiAgICBhIDwtIChwLWspXjIKICAgIGIgPC0gcCtrCiAgICByZXR1cm4oaWZlbHNlKGE+YiwgVFJVRSwgRkFMU0UpKQogIH0KICAKICBkZl9jaGVjayA8LSBkYXRhLmZyYW1lKCkKICBmb3IoaSBpbiAxOnApewogICAgZGZfY2hlY2tbaSwiY2hlY2siXSA8LSBjaGVja19vayhwLGkpCiAgfQogIAogIG1heCA8LSBkZl9jaGVjayAlPiUgZmlsdGVyKGNoZWNrKSAlPiUgbnJvdygpCiAgcmV0dXJuKG1heCkKICAKfQoKIyBtYWtlIGZ1bmN0aW9uIHRvIGltcGxlbWVudCBmYWN0b3IgcmV0ZW50aW9uIGNyaXRlcmlhCnJldGVuX2ZhY3RfZnVuIDwtIGZ1bmN0aW9uKGRmLCByb3QpIHsKICAKICBtYXhfZWZhIDwtIGZhKGRmLCBuZmFjdG9ycyA9IG1heF9mYWN0X2Z1bihuY29sKGRmKSksIHJvdGF0ZSA9ICJub25lIikKICBtYXhfdmFjYyA8LSBtYXhfZWZhJFZhY2NvdW50ZWQgJT4lCiAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICByb3duYW1lc190b19jb2x1bW4oInN0YXQiKSAlPiUKICAgIGdhdGhlcihmYWN0b3IsIHZhbHVlLCAtc3RhdCkgJT4lCiAgICBzcHJlYWQoc3RhdCwgdmFsdWUpICU+JQogICAgZmlsdGVyKGBTUyBsb2FkaW5nc2AgPiAxLCBgUHJvcG9ydGlvbiBFeHBsYWluZWRgID4gMC4wNSkKICBuX3JldGVuMSA8LSBucm93KG1heF92YWNjKQogIAogIHJldGVuX2VmYSA8LSBmYShkZiwgbmZhY3RvcnMgPSBuX3JldGVuMSwgcm90YXRlID0gcm90KQogIHJldGVuX2xvYWRpbmdzIDwtIHJldGVuX2VmYSRsb2FkaW5nc1tdICU+JQogICAgZGF0YS5mcmFtZSgpICU+JQogICAgcm93bmFtZXNfdG9fY29sdW1uKCJtYyIpICU+JQogICAgZ2F0aGVyKGZhY3RvciwgbG9hZGluZywgLW1jKSAlPiUKICAgIGdyb3VwX2J5KG1jKSAlPiUKICAgIHRvcF9uKDEsIGFicyhsb2FkaW5nKSkgJT4lCiAgICB1bmdyb3VwKCkKICBuX3JldGVuMiA8LSByZXRlbl9sb2FkaW5ncyAlPiUKICAgIGNvdW50KGZhY3RvcikgJT4lCiAgICBucm93KCkKICAgIAogIHJldHVybihuX3JldGVuMikKCn0KCiMgbWFrZSBmdW5jdGlvbiB0byBwbG90IGhlYXRtYXAgb2YgZmFjdG9yIGxvYWRpbmdzCmhlYXRtYXBfZnVuIDwtIGZ1bmN0aW9uKGRmLCBuX2ZhY3RvcnMsIHJvdCl7CiAgCiAgIyBkbyBlZmEKICBlZmEgPC0gZmEoZGYsIG5mYWN0b3JzID0gbl9mYWN0b3JzLCByb3RhdGUgPSByb3QpCiAgCiAgIyBnZXQgZmFjdG9yIGxvYWRpbmdzCiAgbG9hZGluZ3MgPC0gZWZhJGxvYWRpbmdzW10gJT4lCiAgICBmYS5zb3J0KCkgJT4lCiAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICByb3duYW1lc190b19jb2x1bW4oIm1jIikgJT4lCiAgICByb3duYW1lc190b19jb2x1bW4oIm9yZGVyIikgJT4lCiAgICBtdXRhdGUob3JkZXIgPSBhcy5udW1lcmljKG9yZGVyKSkgJT4lCiAgICBnYXRoZXIoZmFjdG9yLCBsb2FkaW5nLCAtYyhtYywgb3JkZXIpKQogIAogICMgZ2V0IHNoYXJlZCB2YXJpYW5jZSBleHBsYWluZWQKICB2YWNjIDwtIGVmYSRWYWNjb3VudGVkICU+JQogICAgZGF0YS5mcmFtZSgpICU+JQogICAgcm93bmFtZXNfdG9fY29sdW1uKCJzdGF0IikgJT4lCiAgICBmaWx0ZXIoc3RhdCA9PSAiUHJvcG9ydGlvbiBFeHBsYWluZWQiKSAlPiUKICAgIGdhdGhlcihmYWN0b3IsIHByb3BfdmFyLCAtc3RhdCkgJT4lCiAgICBzZWxlY3QoLXN0YXQpCiAgCiAgIyBwbG90IGl0IGFsbAogIHBsb3QgPC0gZ2dwbG90KGxvYWRpbmdzICU+JSAKICAgICAgICAgICAgICAgICAgIGZ1bGxfam9pbih2YWNjKSAlPiUKICAgICAgICAgICAgICAgICAgIG11dGF0ZShsYWIgPSBwYXN0ZTAoZmFjdG9yLCAiICgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQoMTAwKnJvdW5kKHByb3BfdmFyLCAyKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWdpdHMgPSAyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUpIikpLAogICAgICAgICAgICAgICAgIGFlcyh4ID0gbGFiLCB5ID0gcmVvcmRlcihtYywgZGVzYyhvcmRlcikpLCBmaWxsID0gbG9hZGluZywgCiAgICAgICAgICAgICAgICAgICAgIGxhYmVsID0gZm9ybWF0KHJvdW5kKGxvYWRpbmcsIDIpLCBuc21hbGwgPSAyKSkpICsKICAgIGdlb21fdGlsZShjb2xvciA9ICJibGFjayIpICsKICAgIGdlb21fdGV4dChzaXplID0gMykgKwogICAgc2NhbGVfeF9kaXNjcmV0ZShwb3NpdGlvbiA9ICJ0b3AiKSArCiAgICBzY2FsZV9maWxsX2Rpc3RpbGxlcihsaW1pdHMgPSBjKC0xLCAxKSwgcGFsZXR0ZSA9ICJSZFlsQnUiLAogICAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9jb2xvcmJhcihiYXJoZWlnaHQgPSAxNSkpICsKICAgIHRoZW1lX21pbmltYWwoKQogIAogIHJldHVybihwbG90KQogIAp9CmBgYAoKYGBge3IgZGF0YSwgaW5jbHVkZSA9IEYsIHdhcm5pbmcgPSBGQUxTRX0KIyBVUyBhZHVsdHMsIDIgY2hhcmFjdGVycwpkX3VzYWRfMmNoYXIgPC0gcmVhZC5jc3YoIi9Vc2Vycy9rd2Vpc21hbi9Eb2N1bWVudHMvUmVzZWFyY2ggKFN0YW5mb3JkKS9Qcm9qZWN0cy9EaW1raWQvZGlta2lkL2RhdGEvYWR1bHRzL3VzX3J1bi0wMV8yMDE2LTA2LTA1X2Fub255bWl6ZWQuY3N2IikgJT4lIAogIG11dGF0ZShkYXRlT2ZCaXJ0aCA9IE5BLCBkYXRlT2ZUZXN0ID0gTkEpICU+JQogIGNsZWFuX2tpZF91c19mdW4obl90cmlhbHMgPSA0MCwgYWdlX2xvd2VyID0gMTgsIGFnZV91cHBlciA9IDEwMCkKCmRfdXNhZF8yY2hhcl9kZW1vIDwtIHJlYWQuY3N2KCIvVXNlcnMva3dlaXNtYW4vRG9jdW1lbnRzL1Jlc2VhcmNoIChTdGFuZm9yZCkvUHJvamVjdHMvRGlta2lkL2RpbWtpZC9kYXRhL2FkdWx0cy91c19ydW4tMDFfMjAxNi0wNi0wNV9hbm9ueW1pemVkLmNzdiIpICU+JQogIGRpc3RpbmN0KHN1YmlkLCBjaGFyTmFtZSkKCiMgVVMgYWR1bHRzLCA5IGNoYXJhY3RlciAoTkVFRCBUTyBSVU4pCgojIFVTIDctOXlvLCAyIGNoYXJhY3RlcnMKZF91czc5XzJjaGFyIDwtIHJlYWQuY3N2KCIvVXNlcnMva3dlaXNtYW4vRG9jdW1lbnRzL1Jlc2VhcmNoIChTdGFuZm9yZCkvUHJvamVjdHMvRGlta2lkL2RpbWtpZC9kYXRhL2NoaWxkcmVuL3J1bi0wMV8yMDE3LTA3LTI0X2Fub255bWl6ZWQuY3N2IikgJT4lIGNsZWFuX2tpZF91c19mdW4obl90cmlhbHMgPSA0MCwgYWdlX2xvd2VyID0gNywgYWdlX3VwcGVyID0gOSkKCmRfdXM3OV8yY2hhcl9kZW1vIDwtIHJlYWQuY3N2KCIvVXNlcnMva3dlaXNtYW4vRG9jdW1lbnRzL1Jlc2VhcmNoIChTdGFuZm9yZCkvUHJvamVjdHMvRGlta2lkL2RpbWtpZC9kYXRhL2NoaWxkcmVuL3J1bi0wMV8yMDE3LTA3LTI0X2Fub255bWl6ZWQuY3N2IikgJT4lCiAgZGlzdGluY3Qoc3ViaWQsIGNoYXJhY3RlciwgYWdlKSAlPiUKICBmaWx0ZXIoKGFnZSA+PSA3ICYgYWdlIDwgMTApIHwgaXMubmEoYWdlKSkKCiMgVVMgNy05eW8sIDkgY2hhcmFjdGVycwpkX3VzNzlfOWNoYXIgPC0gcmVhZC5jc3YoIi9Vc2Vycy9rd2Vpc21hbi9Eb2N1bWVudHMvUmVzZWFyY2ggKFN0YW5mb3JkKS9Qcm9qZWN0cy9EaW1raWQvZGlta2lkL2RhdGEvY2hpbGRyZW4vcnVuLTAyXzIwMTctMDgtMDhfYW5vbnltaXplZC5jc3YiKSAlPiUgY2xlYW5fa2lkX3VzX2Z1bihuX3RyaWFscyA9IDIwLCBhZ2VfbG93ZXIgPSA3LCBhZ2VfdXBwZXIgPSA5KQoKZF91czc5XzljaGFyX2RlbW8gPC0gcmVhZC5jc3YoIi9Vc2Vycy9rd2Vpc21hbi9Eb2N1bWVudHMvUmVzZWFyY2ggKFN0YW5mb3JkKS9Qcm9qZWN0cy9EaW1raWQvZGlta2lkL2RhdGEvY2hpbGRyZW4vcnVuLTAyXzIwMTctMDgtMDhfYW5vbnltaXplZC5jc3YiKSAlPiUKICBkaXN0aW5jdChzdWJpZCwgY2hhcmFjdGVyLCBkYXRlT2ZCaXJ0aCwgZGF0ZU9mVGVzdCkgJT4lCiAgbXV0YXRlKGRvYiA9IHBhcnNlX2RhdGV0aW1lKGRhdGVPZkJpcnRoLCAiJW0vJWQvJXkiKSwKICAgICAgICAgZG90ID0gcGFyc2VfZGF0ZXRpbWUoZ3N1YigiMjAxNyIsICIxNyIsIGRhdGVPZlRlc3QpLCAiJW0vJWQvJXkiKSwKICAgICAgICAgYWdlID0gaW50ZXJ2YWwoc3RhcnQgPSBkb2IsIGVuZCA9IGRvdCkgLwogICAgICAgICAgIGR1cmF0aW9uKG51bSA9IDEsIHVuaXRzID0gInllYXJzIikpICU+JQogIGZpbHRlcigoYWdlID49IDcgJiBhZ2UgPCAxMCkgfCBpcy5uYShhZ2UpKQoKIyBVUyA0LTZ5bywgOSBjaGFyYWN0ZXJzCmRfdXM0Nl85Y2hhciA8LSByZWFkLmNzdigiL1VzZXJzL2t3ZWlzbWFuL0RvY3VtZW50cy9SZXNlYXJjaCAoU3RhbmZvcmQpL1Byb2plY3RzL0RpbWtpZC9kaW1raWQvZGF0YS9jaGlsZHJlbi9ydW4tMDNfMjAxNy0wOC0yMV9hbm9ueW1pemVkLmNzdiIpICU+JSBjbGVhbl9raWRfdXNfZnVuKG5fdHJpYWxzID0gMjAsIGFnZV9sb3dlciA9IDQsIGFnZV91cHBlciA9IDYpCgpkX3VzNDZfOWNoYXJfZGVtbyA8LSByZWFkLmNzdigiL1VzZXJzL2t3ZWlzbWFuL0RvY3VtZW50cy9SZXNlYXJjaCAoU3RhbmZvcmQpL1Byb2plY3RzL0RpbWtpZC9kaW1raWQvZGF0YS9jaGlsZHJlbi9ydW4tMDNfMjAxNy0wOC0yMV9hbm9ueW1pemVkLmNzdiIpICU+JQogIGRpc3RpbmN0KHN1YmlkLCBjaGFyYWN0ZXIsIGRhdGVPZkJpcnRoLCBkYXRlT2ZUZXN0KSAlPiUKICBtdXRhdGUoZG9iID0gcGFyc2VfZGF0ZXRpbWUoZGF0ZU9mQmlydGgsICIlbS8lZC8leSIpLAogICAgICAgICBkb3QgPSBwYXJzZV9kYXRldGltZShnc3ViKCIyMDE3IiwgIjE3IiwgZGF0ZU9mVGVzdCksICIlbS8lZC8leSIpLAogICAgICAgICBhZ2UgPSBpbnRlcnZhbChzdGFydCA9IGRvYiwgZW5kID0gZG90KSAvCiAgICAgICAgICAgZHVyYXRpb24obnVtID0gMSwgdW5pdHMgPSAieWVhcnMiKSkgJT4lCiAgZmlsdGVyKChhZ2UgPj0gNCAmIGFnZSA8IDcpIHwgaXMubmEoYWdlKSkKYGBgCgojICBVUyBBZHVsdHMsIDIgY2hhcmFjdGVycwoKIyMgTWF4aW1hbCBzdHJ1Y3R1cmUsIG9ibGltaW4gcm90YXRpb24KCmBgYHtyLCBmaWcud2lkdGggPSA3LCBmaWcuYXNwID0gMC41fQpoZWF0bWFwX2Z1bihkX3VzYWRfMmNoYXIsIG1heF9mYWN0X2Z1bihuY29sKGRfdXNhZF8yY2hhcikpLCAib2JsaW1pbiIpICsKICBsYWJzKHRpdGxlID0gIkZhY3RvciBsb2FkaW5ncywgbWF4aW1hbCBzb2x1dGlvbjogIFVTIEFkdWx0cyIsCiAgICAgICBzdWJ0aXRsZSA9ICIyIGNoYXJhY3RlcnMsIDQwIGNhcGFjaXRpZXMsIG9ibGltaW4gcm90YXRpb24iLAogICAgICAgeCA9ICIiLCB5ID0gIiIsIGZpbGwgPSAiIikKYGBgCgojIyBSZWR1Y2VkIHN0cnVjdHVyZSwgb2JsaW1pbiByb3RhdGlvbgoKYGBge3IsIGZpZy53aWR0aCA9IDMsIGZpZy5hc3AgPSAxLjV9CmhlYXRtYXBfZnVuKGRfdXNhZF8yY2hhciwgcmV0ZW5fZmFjdF9mdW4oZF91c2FkXzJjaGFyLCAib2JsaW1pbiIpLCAib2JsaW1pbiIpICsKICBsYWJzKHRpdGxlID0gIkZhY3RvciBsb2FkaW5ncywgYWZ0ZXIgcmV0ZW50aW9uOiAgVVMgQWR1bHRzIiwKICAgICAgIHN1YnRpdGxlID0gIjIgY2hhcmFjdGVycywgNDAgY2FwYWNpdGllcywgb2JsaW1pbiByb3RhdGlvbiIsCiAgICAgICB4ID0gIiIsIHkgPSAiIiwgZmlsbCA9ICIiKQpgYGAKCiMjIEFsdGVybmF0aXZlIGZhY3RvciByZXRlbnRpb24gbWV0aG9kcwoKYGBge3J9CmZhLnBhcmFsbGVsKGRfdXNhZF8yY2hhcikKYGBgCgpgYGB7ciwgd2FybmluZ3MgPSBGfQpWU1MoZF91c2FkXzJjaGFyLCBuID0gbWF4X2ZhY3RfZnVuKG5jb2woZF91c2FkXzJjaGFyKSksIHJvdGF0ZSA9ICJvYmxpbWluIiwgcGxvdCA9IEYpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDMsIGZpZy5hc3AgPSAxLCBpbmNsdWRlID0gRn0KaGVhdG1hcF9mdW4oZF91c2FkXzJjaGFyLCA0LCAib2JsaW1pbiIpICsKICBsYWJzKHRpdGxlID0gIkZhY3RvciBsb2FkaW5ncywgcGFyYWxsZWwgYW5hbHlzaXM6ICBVUyBBZHVsdHMiLAogICAgICAgc3VidGl0bGUgPSAiMiBjaGFyYWN0ZXJzLCA0MCBjYXBhY2l0aWVzLCBvYmxpbWluIHJvdGF0aW9uIiwKICAgICAgIHggPSAiIiwgeSA9ICIiLCBmaWxsID0gIiIpCmBgYAoKIyMgQ2x1c3RlcmluZyB3aXRoaW4gcmVkdWNlZCBmYWN0b3Igc3BhY2UKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC42N30KIyBwYXIobWFyID0gYygxLCAxLCAxLCA2KSkKY2x1c3QgPC0gZmEoZF91c2FkXzJjaGFyLCAKICAgICAgICAgICAgcmV0ZW5fZmFjdF9mdW4oZF91c2FkXzJjaGFyLCAib2JsaW1pbiIpLCAib2JsaW1pbiIpJGxvYWRpbmdzW10gJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIGRpc3QoKSAlPiUKICBoY2x1c3QoKQoKY2x1c3QgJT4lCiAgYXMuZGVuZHJvZ3JhbSgpICU+JQogICMgc2V0KCJsYWJlbHNfY29sIiwgdmFsdWUgPSBjKCIjYTZjZWUzIiwgIiMxZjc4YjQiLCAiI2IyZGY4YSIsICIjMzNhMDJjIiwKICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiI2ZiOWE5OSIsICIjZTMxYTFjIiwgIiNmZGJmNmYiLCAiI2ZmN2YwMCIsIAogICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjY2FiMmQ2IiwgIiM2YTNkOWEiLCAiI2ZmZmY5OSIsICIjYjE1OTI4IiksIAogICMgICAgIGsgPSA2KSAlPiUKICBzZXQoImJyYW5jaGVzX2x3ZCIsIDAuNSkgJT4lCiAgIyBzZXQoImxlYXZlc19wY2giLCAxNikgJT4lCiAgIyBwbG90KGhvcml6ID0gVCkKICBhcy5nZ2RlbmQoKSAlPiUKICBnZ3Bsb3QoaG9yaXogPSBGKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMiwgbHR5ID0gMiwgY29sb3IgPSAiYmxhY2siKSArCiAgY29vcmRfY2FydGVzaWFuKHlsaW0gPSBjKC0wLjcsIG1heChjbHVzdCRoZWlnaHQpKSkgKwogIGxhYnModGl0bGUgPSAiSGllcmFyY2hpY2FsIGNsdXN0ZXJpbmcgd2l0aGluIHJlZHVjZWQgZmFjdG9yIHNwYWNlOiAgVVMgQWR1bHRzIiwKICAgICAgIHN1YnRpdGxlID0gIjIgY2hhcmFjdGVycywgNDAgY2FwYWNpdGllcywgb2JsaW1pbiByb3RhdGlvbiIpCgpybShjbHVzdCkKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDF9CmRfY2x1c3QgPC0gZmEoZF91c2FkXzJjaGFyLAogICAgICAgICAgICAgIHJldGVuX2ZhY3RfZnVuKGRfdXNhZF8yY2hhciwgIm9ibGltaW4iKSwgIm9ibGltaW4iKSRsb2FkaW5nc1tdICU+JQogIGRhdGEuZnJhbWUoKQoKY2x1c3QgPC0ga21lYW5zKGRfY2x1c3QsIGNlbnRlcnMgPSA2KQojIGZhY3RvZXh0cmE6OmZ2aXpfY2x1c3RlcihjbHVzdCwgZF9jbHVzdCkgKwojICAgdGhlbWVfbWluaW1hbCgpCgpjbHVzdF9jYXQgPC0gY2x1c3QkY2x1c3RlciAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJjYXBhY2l0eSIpICU+JQogIHJlbmFtZSgiY2x1c3RlciIgPSAiLiIpICU+JQogIGZ1bGxfam9pbihkX2NsdXN0ICU+JSByb3duYW1lc190b19jb2x1bW4oImNhcGFjaXR5IikpICU+JQogIGZ1bGxfam9pbihkX2NsdXN0ICU+JSAKICAgICAgICAgICAgICByb3duYW1lc190b19jb2x1bW4oImNhcGFjaXR5IikgJT4lCiAgICAgICAgICAgICAgZ2F0aGVyKGZhY3RvciwgbG9hZGluZywgLWMoY2FwYWNpdHkpKSAlPiUKICAgICAgICAgICAgICBncm91cF9ieShjYXBhY2l0eSkgJT4lIAogICAgICAgICAgICAgIHRvcF9uKDEsIGFicyhsb2FkaW5nKSkgJT4lCiAgICAgICAgICAgICAgdW5ncm91cCgpICU+JQogICAgICAgICAgICAgIHJlbmFtZShkb21fZmFjdG9yID0gZmFjdG9yKSAlPiUKICAgICAgICAgICAgICBzZWxlY3QoLWxvYWRpbmcpKSAlPiUKICBtdXRhdGUoY2x1c3RlciA9IGZhY3RvcihjbHVzdGVyKSkKCmdncGxvdChjbHVzdF9jYXQsIAogICAgICAgYWVzKHggPSBNUjEsIHkgPSBNUjIsCiAgICAgICAgICAgY29sb3IgPSBjbHVzdGVyLAogICAgICAgICAgICMgY29sb3IgPSBkb21fZmFjdG9yLCBzaGFwZSA9IGNsdXN0ZXIsCiAgICAgICAgICAgbGFiZWwgPSBjYXBhY2l0eSkpICsKICBnZW9tX3BvaW50KHNpemUgPSAzKSArIAogIGdncmVwZWw6Omdlb21fdGV4dF9yZXBlbChzaG93LmxlZ2VuZCA9IEYpICsKICAjIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCIjMzc3ZWI4IiwgIiNlNDFhMWMiLCAiIzRkYWY0YSIpKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKGd1aWRlID0gIm5vbmUiLCBwYWxldHRlID0gIlNldDIiKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgtMTAwLCAxMDAsIDAuNSkpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0xMDAsIDEwMCwgMC41KSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgbGFicyh0aXRsZSA9ICJLLW1lYW5zIGNsdXN0ZXJpbmcgd2l0aGluIHJlZHVjZWQgZmFjdG9yIHNwYWNlOiBVUyBBZHVsdHMiLAogICAgICAgc3VidGl0bGUgPSAiMiBjaGFyYWN0ZXJzLCA0MCBjYXBhY2l0aWVzLCBvYmxpbWluIHJvdGF0aW9uIiwKICAgICAgIHggPSAiRUZBOiBNUjEgKEhFQVJUKSIsIHkgPSAiRUZBOiBNUjIgKEJPRFkpIiwKICAgICAgIGNvbG9yID0gIkZhY3RvciIsIHNoYXBlID0gIkNsdXN0ZXIiKSArCiAgdGhlbWUoKQoKZ2dwbG90KGNsdXN0X2NhdCwgCiAgICAgICBhZXMoeCA9IE1SMSwgeSA9IE1SMywKICAgICAgICAgICBjb2xvciA9IGNsdXN0ZXIsCiAgICAgICAgICAgIyBjb2xvciA9IGRvbV9mYWN0b3IsIHNoYXBlID0gY2x1c3RlciwKICAgICAgICAgICBsYWJlbCA9IGNhcGFjaXR5KSkgKwogIGdlb21fcG9pbnQoc2l6ZSA9IDMpICsgCiAgZ2dyZXBlbDo6Z2VvbV90ZXh0X3JlcGVsKHNob3cubGVnZW5kID0gRikgKwogICMgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoIiMzNzdlYjgiLCAiI2U0MWExYyIsICIjNGRhZjRhIikpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIoZ3VpZGUgPSAibm9uZSIsIHBhbGV0dGUgPSAiU2V0MiIpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0xMDAsIDEwMCwgMC41KSkgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoLTEwMCwgMTAwLCAwLjUpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBsYWJzKHRpdGxlID0gIkstbWVhbnMgY2x1c3RlcmluZyB3aXRoaW4gcmVkdWNlZCBmYWN0b3Igc3BhY2U6IFVTIEFkdWx0cyIsCiAgICAgICBzdWJ0aXRsZSA9ICIyIGNoYXJhY3RlcnMsIDQwIGNhcGFjaXRpZXMsIG9ibGltaW4gcm90YXRpb24iLAogICAgICAgeCA9ICJFRkE6IE1SMSAoSEVBUlQpIiwgeSA9ICJFRkE6IE1SMyAoTUlORCkiLAogICAgICAgY29sb3IgPSAiRmFjdG9yIiwgc2hhcGUgPSAiQ2x1c3RlciIpICsKICB0aGVtZSgpCgpnZ3Bsb3QoY2x1c3RfY2F0LCAKICAgICAgIGFlcyh4ID0gTVIyLCB5ID0gTVIzLAogICAgICAgICAgIGNvbG9yID0gY2x1c3RlciwKICAgICAgICAgICAjIGNvbG9yID0gZG9tX2ZhY3Rvciwgc2hhcGUgPSBjbHVzdGVyLAogICAgICAgICAgIGxhYmVsID0gY2FwYWNpdHkpKSArCiAgZ2VvbV9wb2ludChzaXplID0gMykgKyAKICBnZ3JlcGVsOjpnZW9tX3RleHRfcmVwZWwoc2hvdy5sZWdlbmQgPSBGKSArCiAgIyBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiIzM3N2ViOCIsICIjZTQxYTFjIiwgIiM0ZGFmNGEiKSkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihndWlkZSA9ICJub25lIiwgcGFsZXR0ZSA9ICJTZXQyIikgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoLTEwMCwgMTAwLCAwLjUpKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgtMTAwLCAxMDAsIDAuNSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGxhYnModGl0bGUgPSAiSy1tZWFucyBjbHVzdGVyaW5nIHdpdGhpbiByZWR1Y2VkIGZhY3RvciBzcGFjZTogVVMgQWR1bHRzIiwKICAgICAgIHN1YnRpdGxlID0gIjIgY2hhcmFjdGVycywgNDAgY2FwYWNpdGllcywgb2JsaW1pbiByb3RhdGlvbiIsCiAgICAgICB4ID0gIkVGQTogTVIyIChIRUFSVCkiLCB5ID0gIkVGQTogTVIzIChNSU5EKSIsCiAgICAgICBjb2xvciA9ICJGYWN0b3IiLCBzaGFwZSA9ICJDbHVzdGVyIikgKwogIHRoZW1lKCkKCnJtKGRfY2x1c3QsIGNsdXN0LCBjbHVzdF9jYXQpCmBgYAoKCiMgNy05eW8gVVMgQ2hpbGRyZW4sIDIgY2hhcmFjdGVycwoKIyMgTWF4aW1hbCBzdHJ1Y3R1cmUsIG9ibGltaW4gcm90YXRpb24KCmBgYHtyLCBmaWcud2lkdGggPSA3LCBmaWcuYXNwID0gMC41fQpoZWF0bWFwX2Z1bihkX3VzNzlfMmNoYXIsIG1heF9mYWN0X2Z1bihuY29sKGRfdXM3OV8yY2hhcikpLCAib2JsaW1pbiIpICsKICBsYWJzKHRpdGxlID0gIkZhY3RvciBsb2FkaW5ncywgbWF4aW1hbCBzb2x1dGlvbjogNy05eW8gVVMgQ2hpbGRyZW4iLAogICAgICAgc3VidGl0bGUgPSAiMiBjaGFyYWN0ZXJzLCA0MCBjYXBhY2l0aWVzLCBvYmxpbWluIHJvdGF0aW9uIiwKICAgICAgIHggPSAiIiwgeSA9ICIiLCBmaWxsID0gIiIpCmBgYAoKIyMgUmVkdWNlZCBzdHJ1Y3R1cmUsIG9ibGltaW4gcm90YXRpb24KCmBgYHtyLCBmaWcud2lkdGggPSAzLCBmaWcuYXNwID0gMS41fQpoZWF0bWFwX2Z1bihkX3VzNzlfMmNoYXIsIHJldGVuX2ZhY3RfZnVuKGRfdXM3OV8yY2hhciwgIm9ibGltaW4iKSwgIm9ibGltaW4iKSArCiAgbGFicyh0aXRsZSA9ICJGYWN0b3IgbG9hZGluZ3MsIGFmdGVyIHJldGVudGlvbjogNy05eW8gVVMgQ2hpbGRyZW4iLAogICAgICAgc3VidGl0bGUgPSAiMiBjaGFyYWN0ZXJzLCA0MCBjYXBhY2l0aWVzLCBvYmxpbWluIHJvdGF0aW9uIiwKICAgICAgIHggPSAiIiwgeSA9ICIiLCBmaWxsID0gIiIpCmBgYAoKIyMgQWx0ZXJuYXRpdmUgZmFjdG9yIHJldGVudGlvbiBtZXRob2RzCgpgYGB7cn0KZmEucGFyYWxsZWwoZF91czc5XzJjaGFyKQpgYGAKCmBgYHtyLCB3YXJuaW5ncyA9IEZ9ClZTUyhkX3VzNzlfMmNoYXIsIG4gPSBtYXhfZmFjdF9mdW4obmNvbChkX3VzNzlfMmNoYXIpKSwgcm90YXRlID0gIm9ibGltaW4iLCBwbG90ID0gRikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gMywgZmlnLmFzcCA9IDEsIGluY2x1ZGUgPSBGfQpoZWF0bWFwX2Z1bihkX3VzNzlfMmNoYXIsIDUsICJvYmxpbWluIikgKwogIGxhYnModGl0bGUgPSAiRmFjdG9yIGxvYWRpbmdzLCBCSUMgcmV0ZW50aW9uOiA3LTl5byBVUyBDaGlsZHJlbiIsCiAgICAgICBzdWJ0aXRsZSA9ICIyIGNoYXJhY3RlcnMsIDQwIGNhcGFjaXRpZXMsIG9ibGltaW4gcm90YXRpb24iLAogICAgICAgeCA9ICIiLCB5ID0gIiIsIGZpbGwgPSAiIikKYGBgCgojIyBDbHVzdGVyaW5nIHdpdGhpbiByZWR1Y2VkIGZhY3RvciBzcGFjZQoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjY3fQojIHBhcihtYXIgPSBjKDEsIDEsIDEsIDYpKQpjbHVzdCA8LSBmYShkX3VzNzlfMmNoYXIsIAogICAgICAgICAgICByZXRlbl9mYWN0X2Z1bihkX3VzNzlfMmNoYXIsICJvYmxpbWluIiksICJvYmxpbWluIikkbG9hZGluZ3NbXSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgZGlzdCgpICU+JQogIGhjbHVzdCgpCgpjbHVzdCAlPiUKICBhcy5kZW5kcm9ncmFtKCkgJT4lCiAgIyBzZXQoImxhYmVsc19jb2wiLCB2YWx1ZSA9IGMoIiNhNmNlZTMiLCAiIzFmNzhiNCIsICIjYjJkZjhhIiwgIiMzM2EwMmMiLAogICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjZmI5YTk5IiwgIiNlMzFhMWMiLCAiI2ZkYmY2ZiIsICIjZmY3ZjAwIiwgCiAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiNjYWIyZDYiLCAiIzZhM2Q5YSIsICIjZmZmZjk5IiwgIiNiMTU5MjgiKSwgCiAgIyAgICAgayA9IDYpICU+JQogICMgc2V0KCJsYWJlbHNfY29sIiwgdmFsdWUgPSBjKCIjZmI5YTk5IiwgIiNlMzFhMWMiLCAiI2E2Y2VlMyIsICIjMWY3OGI0IiwgCiAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiNiMmRmOGEiLCAiIzMzYTAyYyIpLCAKICAjICAgICBrID0gNikgJT4lCiAgc2V0KCJicmFuY2hlc19sd2QiLCAwLjUpICU+JQogICMgc2V0KCJsZWF2ZXNfcGNoIiwgMTYpICU+JQogICMgcGxvdChob3JpeiA9IFQpCiAgYXMuZ2dkZW5kKCkgJT4lCiAgZ2dwbG90KGhvcml6ID0gRikgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDIsIGx0eSA9IDIsIGNvbG9yID0gImJsYWNrIikgKwogIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygtMC43LCBtYXgoY2x1c3QkaGVpZ2h0KSkpICsKICBsYWJzKHRpdGxlID0gIkhpZXJhcmNoaWNhbCBjbHVzdGVyaW5nIHdpdGhpbiByZWR1Y2VkIGZhY3RvciBzcGFjZTogNy05eW8gVVMgQ2hpbGRyZW4iLAogICAgICAgc3VidGl0bGUgPSAiMiBjaGFyYWN0ZXJzLCA0MCBjYXBhY2l0aWVzLCBvYmxpbWluIHJvdGF0aW9uIikKCnJtKGNsdXN0KQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMX0KZF9jbHVzdCA8LSBmYShkX3VzNzlfMmNoYXIsCiAgICAgICAgICAgICAgcmV0ZW5fZmFjdF9mdW4oZF91czc5XzJjaGFyLCAib2JsaW1pbiIpLCAib2JsaW1pbiIpJGxvYWRpbmdzW10gJT4lCiAgZGF0YS5mcmFtZSgpCgpjbHVzdCA8LSBrbWVhbnMoZF9jbHVzdCwgY2VudGVycyA9IDYpCiMgZmFjdG9leHRyYTo6ZnZpel9jbHVzdGVyKGNsdXN0LCBkX2NsdXN0KSArCiMgICB0aGVtZV9taW5pbWFsKCkKCmNsdXN0X2NhdCA8LSBjbHVzdCRjbHVzdGVyICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oImNhcGFjaXR5IikgJT4lCiAgcmVuYW1lKCJjbHVzdGVyIiA9ICIuIikgJT4lCiAgZnVsbF9qb2luKGRfY2x1c3QgJT4lIHJvd25hbWVzX3RvX2NvbHVtbigiY2FwYWNpdHkiKSkgJT4lCiAgZnVsbF9qb2luKGRfY2x1c3QgJT4lIAogICAgICAgICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigiY2FwYWNpdHkiKSAlPiUKICAgICAgICAgICAgICBnYXRoZXIoZmFjdG9yLCBsb2FkaW5nLCAtYyhjYXBhY2l0eSkpICU+JQogICAgICAgICAgICAgIGdyb3VwX2J5KGNhcGFjaXR5KSAlPiUgCiAgICAgICAgICAgICAgdG9wX24oMSwgYWJzKGxvYWRpbmcpKSAlPiUKICAgICAgICAgICAgICB1bmdyb3VwKCkgJT4lCiAgICAgICAgICAgICAgcmVuYW1lKGRvbV9mYWN0b3IgPSBmYWN0b3IpICU+JQogICAgICAgICAgICAgIHNlbGVjdCgtbG9hZGluZykpICU+JQogIG11dGF0ZShjbHVzdGVyID0gZmFjdG9yKGNsdXN0ZXIpKQoKZ2dwbG90KGNsdXN0X2NhdCwgCiAgICAgICBhZXMoeCA9IE1SMSwgeSA9IE1SMiwKICAgICAgICAgICBjb2xvciA9IGNsdXN0ZXIsCiAgICAgICAgICAgIyBjb2xvciA9IGRvbV9mYWN0b3IsIHNoYXBlID0gY2x1c3RlciwKICAgICAgICAgICBsYWJlbCA9IGNhcGFjaXR5KSkgKwogIGdlb21fcG9pbnQoc2l6ZSA9IDMpICsgCiAgZ2dyZXBlbDo6Z2VvbV90ZXh0X3JlcGVsKHNob3cubGVnZW5kID0gRikgKwogICMgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoIiMzNzdlYjgiLCAiI2U0MWExYyIsICIjNGRhZjRhIikpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIoZ3VpZGUgPSAibm9uZSIsIHBhbGV0dGUgPSAiRGFyazIiKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgtMTAwLCAxMDAsIDAuNSkpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0xMDAsIDEwMCwgMC41KSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgbGFicyh0aXRsZSA9ICJLLW1lYW5zIGNsdXN0ZXJpbmcgd2l0aGluIHJlZHVjZWQgZmFjdG9yIHNwYWNlOiA3LTl5byBVUyBDaGlsZHJlbiIsCiAgICAgICBzdWJ0aXRsZSA9ICIyIGNoYXJhY3RlcnMsIDQwIGNhcGFjaXRpZXMsIG9ibGltaW4gcm90YXRpb24iLAogICAgICAgeCA9ICJFRkE6IE1SMSAoSEVBUlQpIiwgeSA9ICJFRkE6IE1SMiAoQk9EWSkiLAogICAgICAgY29sb3IgPSAiRmFjdG9yIiwgc2hhcGUgPSAiQ2x1c3RlciIpICsKICB0aGVtZSgpCgpnZ3Bsb3QoY2x1c3RfY2F0LCAKICAgICAgIGFlcyh4ID0gTVIxLCB5ID0gTVIzLAogICAgICAgICAgIGNvbG9yID0gY2x1c3RlciwKICAgICAgICAgICAjIGNvbG9yID0gZG9tX2ZhY3Rvciwgc2hhcGUgPSBjbHVzdGVyLAogICAgICAgICAgIGxhYmVsID0gY2FwYWNpdHkpKSArCiAgZ2VvbV9wb2ludChzaXplID0gMykgKyAKICBnZ3JlcGVsOjpnZW9tX3RleHRfcmVwZWwoc2hvdy5sZWdlbmQgPSBGKSArCiAgIyBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiIzM3N2ViOCIsICIjZTQxYTFjIiwgIiM0ZGFmNGEiKSkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihndWlkZSA9ICJub25lIiwgcGFsZXR0ZSA9ICJEYXJrMiIpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0xMDAsIDEwMCwgMC41KSkgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoLTEwMCwgMTAwLCAwLjUpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBsYWJzKHRpdGxlID0gIkstbWVhbnMgY2x1c3RlcmluZyB3aXRoaW4gcmVkdWNlZCBmYWN0b3Igc3BhY2U6IDctOXlvIFVTIENoaWxkcmVuIiwKICAgICAgIHN1YnRpdGxlID0gIjIgY2hhcmFjdGVycywgNDAgY2FwYWNpdGllcywgb2JsaW1pbiByb3RhdGlvbiIsCiAgICAgICB4ID0gIkVGQTogTVIxIChIRUFSVCkiLCB5ID0gIkVGQTogTVIzIChNSU5EKSIsCiAgICAgICBjb2xvciA9ICJGYWN0b3IiLCBzaGFwZSA9ICJDbHVzdGVyIikgKwogIHRoZW1lKCkKCmdncGxvdChjbHVzdF9jYXQsIAogICAgICAgYWVzKHggPSBNUjIsIHkgPSBNUjMsCiAgICAgICAgICAgY29sb3IgPSBjbHVzdGVyLAogICAgICAgICAgICMgY29sb3IgPSBkb21fZmFjdG9yLCBzaGFwZSA9IGNsdXN0ZXIsCiAgICAgICAgICAgbGFiZWwgPSBjYXBhY2l0eSkpICsKICBnZW9tX3BvaW50KHNpemUgPSAzKSArIAogIGdncmVwZWw6Omdlb21fdGV4dF9yZXBlbChzaG93LmxlZ2VuZCA9IEYpICsKICAjIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCIjMzc3ZWI4IiwgIiNlNDFhMWMiLCAiIzRkYWY0YSIpKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKGd1aWRlID0gIm5vbmUiLCBwYWxldHRlID0gIkRhcmsyIikgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoLTEwMCwgMTAwLCAwLjUpKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgtMTAwLCAxMDAsIDAuNSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGxhYnModGl0bGUgPSAiSy1tZWFucyBjbHVzdGVyaW5nIHdpdGhpbiByZWR1Y2VkIGZhY3RvciBzcGFjZTogNy05eW8gVVMgQ2hpbGRyZW4iLAogICAgICAgc3VidGl0bGUgPSAiMiBjaGFyYWN0ZXJzLCA0MCBjYXBhY2l0aWVzLCBvYmxpbWluIHJvdGF0aW9uIiwKICAgICAgIHggPSAiRUZBOiBNUjIgKEhFQVJUKSIsIHkgPSAiRUZBOiBNUjMgKE1JTkQpIiwKICAgICAgIGNvbG9yID0gIkZhY3RvciIsIHNoYXBlID0gIkNsdXN0ZXIiKSArCiAgdGhlbWUoKQoKcm0oZF9jbHVzdCwgY2x1c3QsIGNsdXN0X2NhdCkKYGBgCgoKIyA3LTl5byBVUyBDaGlsZHJlbiwgOSBjaGFyYWN0ZXJzCgojIyBNYXhpbWFsIHN0cnVjdHVyZSwgb2JsaW1pbiByb3RhdGlvbgoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjY3fQpoZWF0bWFwX2Z1bihkX3VzNzlfOWNoYXIsIG1heF9mYWN0X2Z1bihuY29sKGRfdXM3OV85Y2hhcikpLCAib2JsaW1pbiIpICsKICBsYWJzKHRpdGxlID0gIkZhY3RvciBsb2FkaW5ncywgbWF4aW1hbCBzb2x1dGlvbjogNy05eW8gVVMgQ2hpbGRyZW4iLAogICAgICAgc3VidGl0bGUgPSAiOSBjaGFyYWN0ZXJzLCAyMCBjYXBhY2l0aWVzLCBvYmxpbWluIHJvdGF0aW9uIiwKICAgICAgIHggPSAiIiwgeSA9ICIiLCBmaWxsID0gIiIpCmBgYAoKIyMgUmVkdWNlZCBzdHJ1Y3R1cmUsIG9ibGltaW4gcm90YXRpb24KCmBgYHtyLCBmaWcud2lkdGggPSAzLCBmaWcuYXNwID0gMX0KaGVhdG1hcF9mdW4oZF91czc5XzljaGFyLCByZXRlbl9mYWN0X2Z1bihkX3VzNzlfOWNoYXIsICJvYmxpbWluIiksICJvYmxpbWluIikgKwogIGxhYnModGl0bGUgPSAiRmFjdG9yIGxvYWRpbmdzLCBhZnRlciByZXRlbnRpb246IDctOXlvIFVTIENoaWxkcmVuIiwKICAgICAgIHN1YnRpdGxlID0gIjkgY2hhcmFjdGVycywgMjAgY2FwYWNpdGllcywgb2JsaW1pbiByb3RhdGlvbiIsCiAgICAgICB4ID0gIiIsIHkgPSAiIiwgZmlsbCA9ICIiKQpgYGAKCgojIyBBbHRlcm5hdGl2ZSBmYWN0b3IgcmV0ZW50aW9uIG1ldGhvZHMKCmBgYHtyfQpmYS5wYXJhbGxlbChkX3VzNzlfOWNoYXIpCmBgYAoKYGBge3J9ClZTUyhkX3VzNzlfOWNoYXIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDMsIGZpZy5hc3AgPSAxLCBpbmNsdWRlID0gRn0KaGVhdG1hcF9mdW4oZF91czc5XzljaGFyLCA0LCAib2JsaW1pbiIpICsKICBsYWJzKHRpdGxlID0gIkZhY3RvciBsb2FkaW5ncywgNC1mYWN0b3Igc29sdXRpb246IDctOXlvIFVTIENoaWxkcmVuIiwKICAgICAgIHN1YnRpdGxlID0gIjkgY2hhcmFjdGVycywgMjAgY2FwYWNpdGllcywgb2JsaW1pbiByb3RhdGlvbiIsCiAgICAgICB4ID0gIiIsIHkgPSAiIiwgZmlsbCA9ICIiKQpgYGAKCiMjIENsdXN0ZXJpbmcgd2l0aGluIHJlZHVjZWQgZmFjdG9yIHNwYWNlCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNjd9CiMgcGFyKG1hciA9IGMoMSwgMSwgMSwgNikpCmNsdXN0IDwtIGZhKGRfdXM3OV85Y2hhciwgCiAgICAgICAgICAgIHJldGVuX2ZhY3RfZnVuKGRfdXM3OV85Y2hhciwgIm9ibGltaW4iKSwgIm9ibGltaW4iKSRsb2FkaW5nc1tdICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICBkaXN0KCkgJT4lCiAgaGNsdXN0KCkKCmNsdXN0ICU+JQogIGFzLmRlbmRyb2dyYW0oKSAlPiUKICAjIHNldCgibGFiZWxzX2NvbCIsIHZhbHVlID0gYygiI2E2Y2VlMyIsICIjMWY3OGI0IiwgIiNiMmRmOGEiLCAiIzMzYTAyYyIsCiAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiNmYjlhOTkiLCAiI2UzMWExYyIsICIjZmRiZjZmIiwgIiNmZjdmMDAiLCAKICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiI2NhYjJkNiIsICIjNmEzZDlhIiwgIiNmZmZmOTkiLCAiI2IxNTkyOCIpLCAKICAjICAgICBrID0gNCkgJT4lCiAgc2V0KCJicmFuY2hlc19sd2QiLCAwLjUpICU+JQogICMgc2V0KCJsZWF2ZXNfcGNoIiwgMTYpICU+JQogICMgcGxvdChob3JpeiA9IFQpCiAgYXMuZ2dkZW5kKCkgJT4lCiAgZ2dwbG90KGhvcml6ID0gRikgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDIsIGx0eSA9IDIsIGNvbG9yID0gImJsYWNrIikgKwogIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygtMC43LCBtYXgoY2x1c3QkaGVpZ2h0KSkpICsKICBsYWJzKHRpdGxlID0gIkhpZXJhcmNoaWNhbCBjbHVzdGVyaW5nIHdpdGhpbiByZWR1Y2VkIGZhY3RvciBzcGFjZTogNy05eW8gVVMgQ2hpbGRyZW4iLAogICAgICAgc3VidGl0bGUgPSAiOSBjaGFyYWN0ZXJzLCAyMCBjYXBhY2l0aWVzLCBvYmxpbWluIHJvdGF0aW9uIikKCnJtKGNsdXN0KQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMX0KZF9jbHVzdCA8LSBmYShkX3VzNzlfOWNoYXIsCiAgICAgICAgICAgICAgcmV0ZW5fZmFjdF9mdW4oZF91czc5XzljaGFyLCAib2JsaW1pbiIpLCAib2JsaW1pbiIpJGxvYWRpbmdzW10gJT4lCiAgZGF0YS5mcmFtZSgpCgpjbHVzdCA8LSBrbWVhbnMoZF9jbHVzdCwgY2VudGVycyA9IDYpCiMgZmFjdG9leHRyYTo6ZnZpel9jbHVzdGVyKGNsdXN0LCBkX2NsdXN0KSArCiMgICB0aGVtZV9taW5pbWFsKCkKCmNsdXN0X2NhdCA8LSBjbHVzdCRjbHVzdGVyICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oImNhcGFjaXR5IikgJT4lCiAgcmVuYW1lKCJjbHVzdGVyIiA9ICIuIikgJT4lCiAgZnVsbF9qb2luKGRfY2x1c3QgJT4lIHJvd25hbWVzX3RvX2NvbHVtbigiY2FwYWNpdHkiKSkgJT4lCiAgZnVsbF9qb2luKGRfY2x1c3QgJT4lIAogICAgICAgICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigiY2FwYWNpdHkiKSAlPiUKICAgICAgICAgICAgICBnYXRoZXIoZmFjdG9yLCBsb2FkaW5nLCAtYyhjYXBhY2l0eSkpICU+JQogICAgICAgICAgICAgIGdyb3VwX2J5KGNhcGFjaXR5KSAlPiUgCiAgICAgICAgICAgICAgdG9wX24oMSwgYWJzKGxvYWRpbmcpKSAlPiUKICAgICAgICAgICAgICB1bmdyb3VwKCkgJT4lCiAgICAgICAgICAgICAgcmVuYW1lKGRvbV9mYWN0b3IgPSBmYWN0b3IpICU+JQogICAgICAgICAgICAgIHNlbGVjdCgtbG9hZGluZykpICU+JQogIG11dGF0ZShjbHVzdGVyID0gZmFjdG9yKGNsdXN0ZXIpKQoKZ2dwbG90KGNsdXN0X2NhdCwgCiAgICAgICBhZXMoeCA9IE1SMSwgeSA9IE1SMiwKICAgICAgICAgICBjb2xvciA9IGNsdXN0ZXIsCiAgICAgICAgICAgIyBjb2xvciA9IGRvbV9mYWN0b3IsIHNoYXBlID0gY2x1c3RlciwKICAgICAgICAgICBsYWJlbCA9IGNhcGFjaXR5KSkgKwogIGdlb21fcG9pbnQoc2l6ZSA9IDMpICsgCiAgZ2dyZXBlbDo6Z2VvbV90ZXh0X3JlcGVsKHNob3cubGVnZW5kID0gRikgKwogICMgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoIiMzNzdlYjgiLCAiI2U0MWExYyIsICIjNGRhZjRhIikpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIoZ3VpZGUgPSAibm9uZSIsIHBhbGV0dGUgPSAiRGFyazIiKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgtMTAwLCAxMDAsIDAuNSkpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0xMDAsIDEwMCwgMC41KSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgbGFicyh0aXRsZSA9ICJLLW1lYW5zIGNsdXN0ZXJpbmcgd2l0aGluIHJlZHVjZWQgZmFjdG9yIHNwYWNlOiA3LTl5byBVUyBDaGlsZHJlbiIsCiAgICAgICBzdWJ0aXRsZSA9ICI5IGNoYXJhY3RlcnMsIDIwIGNhcGFjaXRpZXMsIG9ibGltaW4gcm90YXRpb24iLAogICAgICAgeCA9ICJFRkE6IE1SMSAoQk9EWSkiLCB5ID0gIkVGQTogTVIyIChNSU5EKSIsCiAgICAgICBjb2xvciA9ICJGYWN0b3IiLCBzaGFwZSA9ICJDbHVzdGVyIikgKwogIHRoZW1lKCkKCmdncGxvdChjbHVzdF9jYXQsIAogICAgICAgYWVzKHggPSBNUjEsIHkgPSBNUjMsCiAgICAgICAgICAgY29sb3IgPSBjbHVzdGVyLAogICAgICAgICAgICMgY29sb3IgPSBkb21fZmFjdG9yLCBzaGFwZSA9IGNsdXN0ZXIsCiAgICAgICAgICAgbGFiZWwgPSBjYXBhY2l0eSkpICsKICBnZW9tX3BvaW50KHNpemUgPSAzKSArIAogIGdncmVwZWw6Omdlb21fdGV4dF9yZXBlbChzaG93LmxlZ2VuZCA9IEYpICsKICAjIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCIjMzc3ZWI4IiwgIiNlNDFhMWMiLCAiIzRkYWY0YSIpKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKGd1aWRlID0gIm5vbmUiLCBwYWxldHRlID0gIkRhcmsyIikgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoLTEwMCwgMTAwLCAwLjUpKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgtMTAwLCAxMDAsIDAuNSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGxhYnModGl0bGUgPSAiSy1tZWFucyBjbHVzdGVyaW5nIHdpdGhpbiByZWR1Y2VkIGZhY3RvciBzcGFjZTogNy05eW8gVVMgQ2hpbGRyZW4iLAogICAgICAgc3VidGl0bGUgPSAiOSBjaGFyYWN0ZXJzLCAyMCBjYXBhY2l0aWVzLCBvYmxpbWluIHJvdGF0aW9uIiwKICAgICAgIHggPSAiRUZBOiBNUjEgKEJPRFkpIiwgeSA9ICJFRkE6IE1SMyAoSEVBUlQpIiwKICAgICAgIGNvbG9yID0gIkZhY3RvciIsIHNoYXBlID0gIkNsdXN0ZXIiKSArCiAgdGhlbWUoKQoKZ2dwbG90KGNsdXN0X2NhdCwgCiAgICAgICBhZXMoeCA9IE1SMiwgeSA9IE1SMywKICAgICAgICAgICBjb2xvciA9IGNsdXN0ZXIsCiAgICAgICAgICAgIyBjb2xvciA9IGRvbV9mYWN0b3IsIHNoYXBlID0gY2x1c3RlciwKICAgICAgICAgICBsYWJlbCA9IGNhcGFjaXR5KSkgKwogIGdlb21fcG9pbnQoc2l6ZSA9IDMpICsgCiAgZ2dyZXBlbDo6Z2VvbV90ZXh0X3JlcGVsKHNob3cubGVnZW5kID0gRikgKwogICMgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoIiMzNzdlYjgiLCAiI2U0MWExYyIsICIjNGRhZjRhIikpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIoZ3VpZGUgPSAibm9uZSIsIHBhbGV0dGUgPSAiRGFyazIiKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgtMTAwLCAxMDAsIDAuNSkpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0xMDAsIDEwMCwgMC41KSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgbGFicyh0aXRsZSA9ICJLLW1lYW5zIGNsdXN0ZXJpbmcgd2l0aGluIHJlZHVjZWQgZmFjdG9yIHNwYWNlOiA3LTl5byBVUyBDaGlsZHJlbiIsCiAgICAgICBzdWJ0aXRsZSA9ICI5IGNoYXJhY3RlcnMsIDIwIGNhcGFjaXRpZXMsIG9ibGltaW4gcm90YXRpb24iLAogICAgICAgeCA9ICJFRkE6IE1SMiAoTUlORCkiLCB5ID0gIkVGQTogTVIzIChIRUFSVCkiLAogICAgICAgY29sb3IgPSAiRmFjdG9yIiwgc2hhcGUgPSAiQ2x1c3RlciIpICsKICB0aGVtZSgpCgpybShkX2NsdXN0LCBjbHVzdCwgY2x1c3RfY2F0KQpgYGAKCiMgNC02eW8gVVMgQ2hpbGRyZW4KCiMjIE1heGltYWwgc3RydWN0dXJlLCBvYmxpbWluIHJvdGF0aW9uCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNjd9CmhlYXRtYXBfZnVuKGRfdXM0Nl85Y2hhciwgbWF4X2ZhY3RfZnVuKG5jb2woZF91czQ2XzljaGFyKSksICJvYmxpbWluIikgKwogIGxhYnModGl0bGUgPSAiRmFjdG9yIGxvYWRpbmdzLCBtYXhpbWFsIHNvbHV0aW9uOiA0LTZ5byBVUyBDaGlsZHJlbiIsCiAgICAgICBzdWJ0aXRsZSA9ICI5IGNoYXJhY3RlcnMsIDIwIGNhcGFjaXRpZXMsIG9ibGltaW4gcm90YXRpb24iLAogICAgICAgeCA9ICIiLCB5ID0gIiIsIGZpbGwgPSAiIikKYGBgCgojIyBSZWR1Y2VkIHN0cnVjdHVyZSwgb2JsaW1pbiByb3RhdGlvbgoKYGBge3IsIGZpZy53aWR0aCA9IDMsIGZpZy5hc3AgPSAxfQpoZWF0bWFwX2Z1bihkX3VzNDZfOWNoYXIsIHJldGVuX2ZhY3RfZnVuKGRfdXM0Nl85Y2hhciwgIm9ibGltaW4iKSwgIm9ibGltaW4iKSArCiAgbGFicyh0aXRsZSA9ICJGYWN0b3IgbG9hZGluZ3MsIGFmdGVyIHJldGVudGlvbjogNC02eW8gVVMgQ2hpbGRyZW4iLAogICAgICAgc3VidGl0bGUgPSAiOSBjaGFyYWN0ZXJzLCAyMCBjYXBhY2l0aWVzLCBvYmxpbWluIHJvdGF0aW9uIiwKICAgICAgIHggPSAiIiwgeSA9ICIiLCBmaWxsID0gIiIpCmBgYAoKCiMjIEFsdGVybmF0aXZlIGZhY3RvciByZXRlbnRpb24gbWV0aG9kcwoKYGBge3J9CmZhLnBhcmFsbGVsKGRfdXM0Nl85Y2hhcikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gMywgZmlnLmFzcCA9IDF9CmhlYXRtYXBfZnVuKGRfdXM0Nl85Y2hhciwgMiwgIm9ibGltaW4iKSArCiAgbGFicyh0aXRsZSA9ICJGYWN0b3IgbG9hZGluZ3MsIHBhcmFsbGVsIGFuYWx5c2lzOiA0LTZ5byBVUyBDaGlsZHJlbiIsCiAgICAgICBzdWJ0aXRsZSA9ICI5IGNoYXJhY3RlcnMsIDIwIGNhcGFjaXRpZXMsIG9ibGltaW4gcm90YXRpb24iLAogICAgICAgeCA9ICIiLCB5ID0gIiIsIGZpbGwgPSAiIikKYGBgCgpgYGB7cn0KVlNTKGRfdXM0Nl85Y2hhcikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gMywgZmlnLmFzcCA9IDF9CmhlYXRtYXBfZnVuKGRfdXM0Nl85Y2hhciwgMSwgIm9ibGltaW4iKSArCiAgbGFicyh0aXRsZSA9ICJGYWN0b3IgbG9hZGluZ3MsIG1pbmltaXppbmcgQklDOiA0LTZ5byBVUyBDaGlsZHJlbiIsCiAgICAgICBzdWJ0aXRsZSA9ICI5IGNoYXJhY3RlcnMsIDIwIGNhcGFjaXRpZXMsIG9ibGltaW4gcm90YXRpb24iLAogICAgICAgeCA9ICIiLCB5ID0gIiIsIGZpbGwgPSAiIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gMywgZmlnLmFzcCA9IDEsIGluY2x1ZGUgPSBGfQpoZWF0bWFwX2Z1bihkX3VzNDZfOWNoYXIsIDQsICJvYmxpbWluIikgKwogIGxhYnModGl0bGUgPSAiRmFjdG9yIGxvYWRpbmdzLCA0LWZhY3RvciBzb2x1dGlvbjogNC02eW8gVVMgQ2hpbGRyZW4iLAogICAgICAgc3VidGl0bGUgPSAiOSBjaGFyYWN0ZXJzLCAyMCBjYXBhY2l0aWVzLCBvYmxpbWluIHJvdGF0aW9uIiwKICAgICAgIHggPSAiIiwgeSA9ICIiLCBmaWxsID0gIiIpCmBgYAoKIyMgQ2x1c3RlcmluZyB3aXRoaW4gcmVkdWNlZCBmYWN0b3Igc3BhY2UKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC42N30KIyBwYXIobWFyID0gYygxLCAxLCAxLCA2KSkKY2x1c3QgPC0gZmEoZF91czQ2XzljaGFyLCAKICAgICAgICAgICAgcmV0ZW5fZmFjdF9mdW4oZF91czQ2XzljaGFyLCAib2JsaW1pbiIpLCAib2JsaW1pbiIpJGxvYWRpbmdzW10gJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIGRpc3QoKSAlPiUKICBoY2x1c3QoKQoKY2x1c3QgJT4lCiAgYXMuZGVuZHJvZ3JhbSgpICU+JQogICMgc2V0KCJsYWJlbHNfY29sIiwgCiAgIyAgICAgIyB2YWx1ZSA9IGNvbG9yUmFtcFBhbGV0dGUoc29sYXJpemVkX3BhbCgpKDgpKSgyMCksCiAgIyAgICAgdmFsdWUgPSBjKCIjYTZjZWUzIiwgIiMxZjc4YjQiLCAiI2IyZGY4YSIsICIjMzNhMDJjIiwKICAjICAgICAgICAgICAgICAgIiNmYjlhOTkiLCAiI2UzMWExYyIsICIjZmRiZjZmIiwgIiNmZjdmMDAiLAogICMgICAgICAgICAgICAgICAiI2NhYjJkNiIsICIjNmEzZDlhIiwgIiNmZmZmOTkiLCAiI2IxNTkyOCIpLAogICMgICAgIGsgPSA2KSAlPiUKICBzZXQoImJyYW5jaGVzX2x3ZCIsIDAuNSkgJT4lCiAgIyBzZXQoImxlYXZlc19wY2giLCAxNikgJT4lCiAgIyBwbG90KGhvcml6ID0gVCkKICBhcy5nZ2RlbmQoKSAlPiUKICBnZ3Bsb3QoaG9yaXogPSBGKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMiwgbHR5ID0gMiwgY29sb3IgPSAiYmxhY2siKSArCiAgY29vcmRfY2FydGVzaWFuKHlsaW0gPSBjKC0wLjcsIG1heChjbHVzdCRoZWlnaHQpKSkgKwogIGxhYnModGl0bGUgPSAiSGllcmFyY2hpY2FsIGNsdXN0ZXJpbmcgd2l0aGluIHJlZHVjZWQgZmFjdG9yIHNwYWNlOiA0LTZ5byBVUyBDaGlsZHJlbiIsCiAgICAgICBzdWJ0aXRsZSA9ICI5IGNoYXJhY3RlcnMsIDIwIGNhcGFjaXRpZXMsIG9ibGltaW4gcm90YXRpb24iKQoKcm0oY2x1c3QpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAxfQpkX2NsdXN0IDwtIGZhKGRfdXM0Nl85Y2hhciwKICAgICAgICAgICAgICByZXRlbl9mYWN0X2Z1bihkX3VzNDZfOWNoYXIsICJvYmxpbWluIiksICJvYmxpbWluIikkbG9hZGluZ3NbXSAlPiUKICBkYXRhLmZyYW1lKCkKCmNsdXN0IDwtIGttZWFucyhkX2NsdXN0LCBjZW50ZXJzID0gNikKIyBmYWN0b2V4dHJhOjpmdml6X2NsdXN0ZXIoY2x1c3QsIGRfY2x1c3QpICsKIyAgIHRoZW1lX21pbmltYWwoKQoKY2x1c3RfY2F0IDwtIGNsdXN0JGNsdXN0ZXIgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigiY2FwYWNpdHkiKSAlPiUKICByZW5hbWUoImNsdXN0ZXIiID0gIi4iKSAlPiUKICBmdWxsX2pvaW4oZF9jbHVzdCAlPiUgcm93bmFtZXNfdG9fY29sdW1uKCJjYXBhY2l0eSIpKSAlPiUKICBmdWxsX2pvaW4oZF9jbHVzdCAlPiUgCiAgICAgICAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJjYXBhY2l0eSIpICU+JQogICAgICAgICAgICAgIGdhdGhlcihmYWN0b3IsIGxvYWRpbmcsIC1jKGNhcGFjaXR5KSkgJT4lCiAgICAgICAgICAgICAgZ3JvdXBfYnkoY2FwYWNpdHkpICU+JSAKICAgICAgICAgICAgICB0b3BfbigxLCBhYnMobG9hZGluZykpICU+JQogICAgICAgICAgICAgIHVuZ3JvdXAoKSAlPiUKICAgICAgICAgICAgICByZW5hbWUoZG9tX2ZhY3RvciA9IGZhY3RvcikgJT4lCiAgICAgICAgICAgICAgc2VsZWN0KC1sb2FkaW5nKSkgJT4lCiAgbXV0YXRlKGNsdXN0ZXIgPSBmYWN0b3IoY2x1c3RlcikpCgpnZ3Bsb3QoY2x1c3RfY2F0LCAKICAgICAgIGFlcyh4ID0gTVIxLCB5ID0gTVIyLAogICAgICAgICAgIGNvbG9yID0gY2x1c3RlciwKICAgICAgICAgICAjIGNvbG9yID0gZG9tX2ZhY3Rvciwgc2hhcGUgPSBjbHVzdGVyLAogICAgICAgICAgIGxhYmVsID0gY2FwYWNpdHkpKSArCiAgZ2VvbV9wb2ludChzaXplID0gMykgKyAKICBnZ3JlcGVsOjpnZW9tX3RleHRfcmVwZWwoc2hvdy5sZWdlbmQgPSBGKSArCiAgIyBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiIzM3N2ViOCIsICIjZTQxYTFjIiwgIiM0ZGFmNGEiKSkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihndWlkZSA9ICJub25lIiwgcGFsZXR0ZSA9ICJTZXQyIikgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoLTEwMCwgMTAwLCAwLjUpKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgtMTAwLCAxMDAsIDAuNSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGxhYnModGl0bGUgPSAiSy1tZWFucyBjbHVzdGVyaW5nIHdpdGhpbiByZWR1Y2VkIGZhY3RvciBzcGFjZTogNC02eW8gVVMgQ2hpbGRyZW4iLAogICAgICAgc3VidGl0bGUgPSAiOSBjaGFyYWN0ZXJzLCAyMCBjYXBhY2l0aWVzLCBvYmxpbWluIHJvdGF0aW9uIiwKICAgICAgIHggPSAiRUZBOiBNUjEgKEJPRFkpIiwgeSA9ICJFRkE6IE1SMiAoTUlORCkiLAogICAgICAgY29sb3IgPSAiRmFjdG9yIiwgc2hhcGUgPSAiQ2x1c3RlciIpICsKICB0aGVtZSgpCgpnZ3Bsb3QoY2x1c3RfY2F0LCAKICAgICAgIGFlcyh4ID0gTVIxLCB5ID0gTVIzLAogICAgICAgICAgIGNvbG9yID0gY2x1c3RlciwKICAgICAgICAgICAjIGNvbG9yID0gZG9tX2ZhY3Rvciwgc2hhcGUgPSBjbHVzdGVyLAogICAgICAgICAgIGxhYmVsID0gY2FwYWNpdHkpKSArCiAgZ2VvbV9wb2ludChzaXplID0gMykgKyAKICBnZ3JlcGVsOjpnZW9tX3RleHRfcmVwZWwoc2hvdy5sZWdlbmQgPSBGKSArCiAgIyBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiIzM3N2ViOCIsICIjZTQxYTFjIiwgIiM0ZGFmNGEiKSkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihndWlkZSA9ICJub25lIiwgcGFsZXR0ZSA9ICJTZXQyIikgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoLTEwMCwgMTAwLCAwLjUpKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgtMTAwLCAxMDAsIDAuNSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGxhYnModGl0bGUgPSAiSy1tZWFucyBjbHVzdGVyaW5nIHdpdGhpbiByZWR1Y2VkIGZhY3RvciBzcGFjZTogNC02eW8gVVMgQ2hpbGRyZW4iLAogICAgICAgc3VidGl0bGUgPSAiOSBjaGFyYWN0ZXJzLCAyMCBjYXBhY2l0aWVzLCBvYmxpbWluIHJvdGF0aW9uIiwKICAgICAgIHggPSAiRUZBOiBNUjEgKEJPRFkpIiwgeSA9ICJFRkE6IE1SMyAoSEVBUlQpIiwKICAgICAgIGNvbG9yID0gIkZhY3RvciIsIHNoYXBlID0gIkNsdXN0ZXIiKSArCiAgdGhlbWUoKQoKZ2dwbG90KGNsdXN0X2NhdCwgCiAgICAgICBhZXMoeCA9IE1SMiwgeSA9IE1SMywKICAgICAgICAgICBjb2xvciA9IGNsdXN0ZXIsCiAgICAgICAgICAgIyBjb2xvciA9IGRvbV9mYWN0b3IsIHNoYXBlID0gY2x1c3RlciwKICAgICAgICAgICBsYWJlbCA9IGNhcGFjaXR5KSkgKwogIGdlb21fcG9pbnQoc2l6ZSA9IDMpICsgCiAgZ2dyZXBlbDo6Z2VvbV90ZXh0X3JlcGVsKHNob3cubGVnZW5kID0gRikgKwogICMgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoIiMzNzdlYjgiLCAiI2U0MWExYyIsICIjNGRhZjRhIikpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIoZ3VpZGUgPSAibm9uZSIsIHBhbGV0dGUgPSAiU2V0MiIpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0xMDAsIDEwMCwgMC41KSkgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoLTEwMCwgMTAwLCAwLjUpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBsYWJzKHRpdGxlID0gIkstbWVhbnMgY2x1c3RlcmluZyB3aXRoaW4gcmVkdWNlZCBmYWN0b3Igc3BhY2U6IDQtNnlvIFVTIENoaWxkcmVuIiwKICAgICAgIHN1YnRpdGxlID0gIjkgY2hhcmFjdGVycywgMjAgY2FwYWNpdGllcywgb2JsaW1pbiByb3RhdGlvbiIsCiAgICAgICB4ID0gIkVGQTogTVIyIChNSU5EKSIsIHkgPSAiRUZBOiBNUjMgKEhFQVJUKSIsCiAgICAgICBjb2xvciA9ICJGYWN0b3IiLCBzaGFwZSA9ICJDbHVzdGVyIikgKwogIHRoZW1lKCkKCnJtKGRfY2x1c3QsIGNsdXN0LCBjbHVzdF9jYXQpCmBgYAoKIyBDaGFuZ2VzIGluIG1lbnRhbCBjYXBhY2l0eSBhdHRyaWJ1dGlvbnMKCmBgYHtyLCBmaWcud2lkdGggPSA1LCBmaWcuYXNwID0gMC40fQplZmFfb2xkIDwtIGZhKGRfdXM3OV85Y2hhciwgbmZhY3RvcnMgPSAzLCByb3RhdGUgPSAib2JsaW1pbiIpCmVmYV9vbGQkbG9hZGluZ3NbXSAlPiUgCiAgZmEuc29ydCgpICU+JSAKICBkYXRhLmZyYW1lKCkgJT4lIAogIHJvd25hbWVzX3RvX2NvbHVtbigiY2FwYWNpdHkiKSAlPiUgCiAgZ2F0aGVyKGZhY3RvciwgbG9hZGluZywgLWNhcGFjaXR5KSAlPiUKICBncm91cF9ieShmYWN0b3IpICU+JSAKICB0b3Bfbig0LCBhYnMobG9hZGluZykpICU+JQogIGFycmFuZ2UoZmFjdG9yLCBkZXNjKGFicyhsb2FkaW5nKSkpICU+JQogIHVuZ3JvdXAoKQoKcHJvamVjdGVkX3lvdW5nIDwtIHByZWRpY3QucHN5Y2goZWZhX29sZCwgZF91czQ2XzljaGFyLCBkX3VzNzlfOWNoYXIpICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInN1YmlkIikgJT4lCiAgbXV0YXRlKGFnZV9ncm91cCA9ICI0LTZ5IikgJT4lCiAgZnVsbF9qb2luKGRfdXM0Nl85Y2hhcl9kZW1vICU+JSBkaXN0aW5jdChzdWJpZCwgY2hhcmFjdGVyLCBhZ2UpKQoKc2NvcmVzX29sZCA8LSBlZmFfb2xkJHNjb3JlcyAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJzdWJpZCIpICU+JQogIG11dGF0ZShhZ2VfZ3JvdXAgPSAiNy05eSIpICU+JQogIGZ1bGxfam9pbihkX3VzNzlfOWNoYXJfZGVtbyAlPiUgZGlzdGluY3Qoc3ViaWQsIGNoYXJhY3RlciwgYWdlKSkKCnNjb3Jlc19hbGwgPC0gcHJvamVjdGVkX3lvdW5nICU+JQogIGZ1bGxfam9pbihzY29yZXNfb2xkKSAlPiUKICBmaWx0ZXIoIWlzLm5hKGNoYXJhY3RlciksICFjaGFyYWN0ZXIgJWluJSBjKCIiLCAiICIpKSAlPiUKICBnYXRoZXIoZmFjdG9yLCBzY29yZSwgc3RhcnRzX3dpdGgoIk1SIikpICU+JQogIG11dGF0ZShmYWN0b3IgPSBmYWN0b3IoZmFjdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiTVIxIiwgIk1SMyIsICJNUjIiKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIkJPRFkiLCAiSEVBUlQiLCAiTUlORCIpKSwKICAgICAgICAgY2hhcmFjdGVyID0gZmFjdG9yKGNoYXJhY3RlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoImNvbXB1dGVyIiwgInJvYm90IiwgImRvbGwiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlZGR5X2JlYXIiLCAiYmVldGxlIiwgImJpcmQiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdXNlIiwgImdvYXQiLCAiZWxlcGhhbnQiKSkpCgpzY29yZXNfYWxsICU+JSBkaXN0aW5jdChhZ2VfZ3JvdXAsIGNoYXJhY3Rlciwgc3ViaWQpICU+JSBjb3VudChjaGFyYWN0ZXIpICU+JSBzdW1tYXJpc2UobWluID0gbWluKG4pLCBtYXggPSBtYXgobikpCgpnZ3Bsb3Qoc2NvcmVzX2FsbCwKICAgICAgIGFlcyh4ID0gYWdlLCB5ID0gc2NvcmUsCiAgICAgICAgICAgZ3JvdXAgPSBjaGFyYWN0ZXIsIGNvbG9yID0gY2hhcmFjdGVyLCBmaWxsID0gY2hhcmFjdGVyKSkgKwogIGZhY2V0X2dyaWQofiBmYWN0b3IpICsKICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSA3LCBsdHkgPSAzKSArCiAgZ2VvbV9wb2ludCgpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBhbHBoYSA9IDAuMSkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIlBhaXJlZCIsIGRpcmVjdGlvbiA9IDEpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIlBhaXJlZCIsIGRpcmVjdGlvbiA9IDEpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGxhYnMoeCA9ICJBZ2UgKHkpIiwKICAgICAgIHkgPSAiRmFjdG9yIHNjb3JlIChpbiBvbGRlciBjaGlsZHJlbidzIDMtZmFjdG9yIHNwYWNlKSIsCiAgICAgICBjb2xvciA9ICJDaGFyYWN0ZXIiLCBmaWxsID0gIkNoYXJhY3RlciIpCmBgYAoK